A. python程序代碼混淆、編譯、打包、運行(桌面程序防破解向)
像Python這種解釋性的語言,要想私有化部署的同時又保護好源碼,就像是對於魚和熊掌的追求。
雖然做不到盡善盡美,但是對代碼進行混淆,增加一點破解的難度,或許能規避一些泄露的風險。
本次演示環境:linux
確保要發布的包根目錄("demo")中有__main__.py文件,這個是程序執行入口。
編譯
批量改名.pyc文件
移動.pyc文件
清理.py文件
清理__pycache__文件夾
打包成zip
運行時只要將zip文件作為參數即可
最終整合腳本
調用方式
對於在變數和函數名上的混淆有點小兒科,而對於跨文件的類名的混淆又太容易實現。
所以對於混淆程度的取捨,要視工程的規模而定。
2.1 混淆工具pyminifier
在原來的工具 pyminifier上修復了幾個bug。
安裝:
python3 安裝
或者clone下來,自行安裝
使用例子
2.2 源碼變更
不同的配置對於源碼的要求不同,以下是筆者踩過的坑。
其他混淆想法
結合混淆、編譯和打包,嘗試出以下發布腳本。
主要的思路 :創建一個工作目錄tmp,然後在此目錄下混淆、編譯python代碼,完成後把內容打包成pyc文件,再將pyc文件和其他配置文件移動到dist,發布dist即可。
混淆的目的是最大程度保護源碼,在發布到客戶端後不被輕易破解。
B. 編寫程序需要什麼軟體
學習編程,用什麼編程軟體?
我給你一個權威而定解釋:
1、就近幾個月來說,月編程語言排行榜中java依然是遙遙領先其次是C語言再是c++、VB,感興趣可以搜索下看看
2、難度:c++是編程語言裡面最難學的一門語言這時業界公認的,Java最好學,即使沒供礎幾個月就也可以入門,行業有句話:聰明人用delphi,懶人用VB,你側重理解後一句即可
3、哪個好:編程是一種跨語言的技術,無論什麼語言語鍵御法都差不多,貴在精通,你可以搜索下各種語言的薪資平均水平就知道了。
編程序需要哪些軟體
看你是要用哪種語言啦一、 如果你用C1、Turboc DOS經典編譯軟體2、Win-TC 圖形化編譯軟體,其特點是容量小3、VC++ 微軟體開發的,主要是用來弄C++的,不過因為他支持中文顯示,做為C的開發也很不錯二、如果你是搞VB、VS等的你可以直接下載一個Microsoft Visual 集成,裡麵包含有VC++、VS、VB等編譯軟體三、如果你是要搞JAVA的1、你如果自認為自己寫代碼很牛,那你就去下載個一java編譯器就行了,代碼用記事本寫2、不然你就去下載下JDK四、搞匯編的1、Ma *** 集成實驗環境還是很不錯的五、搞網站開發的(1)asp,把你的電腦IIS配置好,不用軟體,一個記事本一樣搞定(2)php 那你就得去下載Apache、php5.0、Mysql,一樣稿敬岩,代碼用記事本就能搞定,前軟體只是構建一個環境 (3)Drewawear應該少不了啦暫就這些,都是我用過的
編程序需要准備那些應用的軟體和工具嗎?
應用軟體開發的工具有:Visual Basic 、Delphi 、VC++ ( C++ Builder ) 等;資料庫開發工具有:Visual Foxpro 、Oracle Developer 、Power Builder 等。跨平台開發 開發工具如 Java 等。對客戶端開發工具如:Java Script 等;對伺服器開發工具如:PHP 、ASP 、JSP 、ISAPI 、NSAPI 、CGI 等。
目前最常用的編寫程序的軟體是那種
首先主要寫什麼語言了一般寫C:VC++ VS
Java:eclipse
前端:sublime Hbuilder等
編寫C語言程序用什麼編程軟體
Visual C++ 6.0,你以後要參加大型考試都得用這個軟體,這個軟體有中英文兩版,建議使用中文的,在建立新文件時記得寫文件名時後面加上擴展名.c,否則會被系統誤認為是c++程序,兩種程序有區別。。。
編程應該用什麼軟體,初學者應該用什麼。
如果是第一次接觸 最好先試試 VB (VisualBasic)或者 C語言(Torbo C) 因為這兩者相對較為簡單實用,也能完成編編小軟體的任務,如處不是初學可以試試C++(C++ Builder)
這幾種語言無所謂區別 B和C是不同的語言 而C++類似於C的升級
電腦上用來編程的是什麼軟體? 100分
現在頗具前景的是Java語言,java程序開發工具新手一般習慣用JDK之後是Eclipse,myeclipse等.
其次是C++,一般使用Visual c++,C#是Visual Studio。
還有其它的例如BASIC使用Visual Basic。SQL是SQL Server。PHP用Norepad++等。
沒有軟體稿塌不需要第三方開發工具或語言,包括C和匯編而成的windows。
windows不集成常用的開發工具,需要自己安裝。也可以選擇使用命令行edit命令來編輯程序,安裝Turbo c後即可使用dos開發C語言程序。
寫軟體要學習一些什麼??
1、編程對邏輯思維要求較高,所以你最好對數學方面將強訓練
2、很多最新的IT信息都是英文的,為了更好更快的掌握這些知識,流利的英語必不可少
3、一個好的軟體是貼近實際需要的,所以如果你能對其他行業的業務有所了解,會對你很有幫助。
4、綜上所述,你最好成為一個通才,不需要什麼都精通,但最好都了解。努力吧騷年。哦,對了,寫軟體的熬夜時家常便飯,強壯的身體很重要哦。
至於學什麼……先去看看C語言基礎吧,譚浩強寫的那本,寫的很不錯。等都掌握了,不管是學java還是c#都隨你了
軟體編程入門需要哪些准備和軟體
如果你只想要是學習簡單的編程,那就學學VB,這個比較易懂且使用。如果你是想在編程方面有進一步的發展,我建議你從C語言開始學起。至需要什麼文化知道,只要你肯去看這方面的書就行了。軟體的話,VB有visual basic 6.0,C語言的話可以用TURBO C,或者visual C++等,其實軟體都差不多,只要你懂原理,其實都一樣。祝你成功。
C. 如何利用CEF3創建一個簡單的應用程序
開始
首先,根據自身所使用的開發平台,可以去 這里 下載對應的發布版本。針對這個教程,我們需要下載1750或者更新的版本。當前支持的平台有Windows, Linux和Mac OS X。每一個版本都包含了當在特定平台上編譯特定版本CEF3時所需要的所有文件和資源。您可以通過包含在里邊的 REDME.txt 文件或者在Wiki上GeneralUsage 中的 Getting Started,了解每個發布版本的具體內容和細節。
編譯發布版本中的項目
以CEF發布版本為基礎開發的應用程序可以使用標準的平台編譯工具進行編譯執行。包括 Windows 平台下的 Visual Studio, Mac OS X 平台下的 Xcode, 以及 Linux 平台下的 gcc/make。針對平台的不同,項目的編譯過程也有些許的不同和要求。
Windows
Windows 平台下編譯 Cefsimple 步驟:
1. 用對應的 Visual Studio 版本打開項目解決方案。舉個例子,如果你安裝的是 Visual Studio 2010, 那麼,打開的就是 cesimple2010.sln。
2. 如果你下載的是 x64版本,請確保你選擇的是 x64的開發平台。
3. 開始編譯。
4. 如果編譯通過,那麼,在當前解決方案的目錄下,將出現「out/Debug」(或者 「out/Release」)文件夾。
5. 執行文件夾下 cefsimple.exe, 確保能正確運行。
載入一個自定義URL
cefsimple項目中默認載入的URL是 google.com,當然,你也可以用自定義的 URL 去替代它,最方便的就是通過命令行搞定。
# Load the local file 「c:\example\example.html」
cefsimple.exe --url=file://c:/example/example.html
除了命令行的方法,也可以通過直接修改在 cefsimple/simple.cpp 文件中的代碼,達到你的目的。
# Load the local file 「c:\example\example.html」
…
if (url.empty())
url = file://c:/example/example.html;
應用程序組成
所有的 CEF 應用程序都有一下主要組成部分:
1. CEF 的動態鏈接庫 。(在 Windows 平台下就是 libcef.dll)
2. 支持庫。(ICU, FFMPEG等)
3. 資源。(html/js/css, strings等)
4. 客戶端執行文件。(本教程中就是 cefsimple.exe.)
要點(必看)
1. CEF 使用的是多進程。應用程序主進程是瀏覽器進程,而其他子進程是由 renderer, plugins, GPU等創建。
2. 在 Windows 和 Linux 平台下的執行文件可以被主進程和子進程使用。
3. CEF 中所有進程都可以是多線程的。CEF提供了許多功能和介面在不同的線程中傳遞任務。
4. 一些回調方法和函數只能在特定的進程或者線程中使用。在你第一次使用新的回調方法或者函數之前,請確保你已經閱讀了 API 頭文件中源碼,看使用要求。
流程分析
cefsimple 應用程序首先初始化CEF,然後創建了一個簡單的彈出瀏覽器窗口。當關閉了所有的瀏覽器窗口,應用程序就會結束。程序執行流程如下:
1. 系統執行入口點函數(main or wWinMain),並創建瀏覽器進程。
2. 入口點函數:
1. 創建能夠處理進程級別的回調方法的 SimpleApp 實例。
2. 初始化 CEF,進入 CEF 消息循環。
3. 初始化 CEF 之後,調用 SimpleApp::OnContextInitialized() 。這個方法中:
1. 創建單例的 SimpleHandler 。
2. 由 CefBrowserHost::CreateBrowsersync() 方法創建一個瀏覽器窗口。
4. 所有的瀏覽器共享 SimpleHandler 實例, 此實例能定製瀏覽器行為、處理瀏覽器相關回調方法(life span, loading state, title display等)。
5. 當一個瀏覽器窗口關閉的時候,調用 SimpleHandler::OnBeforeClose() 。當所有的瀏覽器窗口全部關閉時,OnBeforeClose() 函數就會執行跳出 CEF 消息循環的行為,退出應用程序。
入口點函數
程序的運行開始於瀏覽器進程中的入口點函數。這個函數會初始化 CEF 以及所有跟操作系統有關的對象。
Windows
#include <windows.h>
#include "cefsimple/simple_app.h"
#include "include/cef_sandbox_win.h"
// Set to 0 to disable sandbox support.
#define CEF_ENABLE_SANDBOX 1
#if CEF_ENABLE_SANDBOX
// The cef_sandbox.lib static library is currently built with VS2010. It may not
// link successfully with other VS versions.
#pragma comment(lib, "cef_sandbox.lib")
#endif
// Entry point function for all processes.
int APIENTRY wWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow) {
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
void* sandbox_info = NULL;
#if CEF_ENABLE_SANDBOX
// Manage the life span of the sandbox information object. This is necessary
// for sandbox support on Windows. See cef_sandbox_win.h for complete details.
CefScopedSandboxInfo scoped_sandbox;
sandbox_info = scoped_sandbox.sandbox_info();
#endif
// Provide CEF with command-line arguments.
CefMainArgs main_args(hInstance);
// SimpleApp implements application-level callbacks. It will create the first
// browser instance in OnContextInitialized() after CEF has initialized.
CefRefPtr<SimpleApp> app(new SimpleApp);
// CEF applications have multiple sub-processes (render, plugin, GPU, etc)
// that share the same executable. This function checks the command-line and,
// if this is a sub-process, executes the appropriate logic.
int exit_code = CefExecuteProcess(main_args, app.get(), sandbox_info);
if (exit_code >= 0) {
// The sub-process has completed so return here.
return exit_code;
}
// Specify CEF global settings here.
CefSettings settings;
#if !CEF_ENABLE_SANDBOX
settings.no_sandbox = true;
#endif
// Initialize CEF.
CefInitialize(main_args, settings, app.get(), sandbox_info);
// Run the CEF message loop. This will block until CefQuitMessageLoop() is
// called.
CefRunMessageLoop();
// Shut down CEF.
CefShutdown();
return 0;
}
SimpleApp
SimpleApp 負責處理進程級別的回調方法。它會曝露出一些在多進程中共享或者被特定進程使用的介面和方法。CefBrowserProcessHandler 介面,在瀏覽器進程中調用。還有一個被分離出 CefBrowserProcessHandler 介面(例子項目沒有展示)只會在渲染進程中被調用。由於 CefBrowserProcessHandler 不光實現了 CefApp, 同時還有 CefBrowserProcessHandler,所以它的返回值必須是[this]。
// simple_app.h
#include "include/cef_app.h"
class SimpleApp : public CefApp,
public CefBrowserProcessHandler {
public:
SimpleApp();
// CefApp methods:
virtual CefRefPtr<CefBrowserProcessHandler> GetBrowserProcessHandler()
OVERRIDE { return this; }
// CefBrowserProcessHandler methods:
virtual void OnContextInitialized() OVERRIDE;
private:
// Include the default reference counting implementation.
IMPLEMENT_REFCOUNTING(SimpleApp);
};
// simple_app.cpp
#include "cefsimple/simple_app.h"
#include <string>
#include "cefsimple/simple_handler.h"
#include "cefsimple/util.h"
#include "include/cef_browser.h"
#include "include/cef_command_line.h"
SimpleApp::SimpleApp() {
}
void SimpleApp::OnContextInitialized() {
REQUIRE_UI_THREAD();
// Information used when creating the native window.
CefWindowInfo window_info;
#if defined(OS_WIN)
// On Windows we need to specify certain flags that will be passed to
// CreateWindowEx().
window_info.SetAsPopup(NULL, "cefsimple");
#endif
// SimpleHandler implements browser-level callbacks.
CefRefPtr<SimpleHandler> handler(new SimpleHandler());
// Specify CEF browser settings here.
CefBrowserSettings browser_settings;
std::string url;
// Check if a "--url=" value was provided via the command-line. If so, use
// that instead of the default URL.
CefRefPtr<CefCommandLine> command_line =
CefCommandLine::GetGlobalCommandLine();
url = command_line->GetSwitchValue("url");
if (url.empty())
url = "http://www.google.com";
// Create the first browser window.
CefBrowserHost::CreateBrowserSync(window_info, handler.get(), url,
browser_settings, NULL);
}
SimpleHandler
SimpleHandler 負責處理瀏覽器級別的回調方法。這些回調方法會在瀏覽器進程中執行。在這個項目中,針對所有的瀏覽器使用相同的 CefClient 實例,但是如果你願意,可以在自己的應用程序中使用不同的 CefClient實例的。
// simple_handler.h
#include "include/cef_client.h"
#include <list>
class SimpleHandler : public CefClient,
public CefDisplayHandler,
public CefLifeSpanHandler,
public CefLoadHandler {
public:
SimpleHandler();
~SimpleHandler();
// Provide access to the single global instance of this object.
static SimpleHandler* GetInstance();
// CefClient methods:
virtual CefRefPtr<CefDisplayHandler> GetDisplayHandler() OVERRIDE {
return this;
}
virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() OVERRIDE {
return this;
}
virtual CefRefPtr<CefLoadHandler> GetLoadHandler() OVERRIDE {
return this;
}
// CefDisplayHandler methods:
virtual void OnTitleChange(CefRefPtr<CefBrowser> browser,
const CefString& title) OVERRIDE;
// CefLifeSpanHandler methods:
virtual void OnAfterCreated(CefRefPtr<CefBrowser> browser) OVERRIDE;
virtual void OnBeforeClose(CefRefPtr<CefBrowser> browser) OVERRIDE;
// CefLoadHandler methods:
virtual void OnLoadError(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
ErrorCode errorCode,
const CefString& errorText,
const CefString& failedUrl) OVERRIDE;
// Request that all existing browser windows close.
void CloseAllBrowsers(bool force_close);
private:
// List of existing browser windows. Only accessed on the CEF UI thread.
typedef std::list<CefRefPtr<CefBrowser> > BrowserList;
BrowserList browser_list_;
// Include the default reference counting implementation.
IMPLEMENT_REFCOUNTING(SimpleHandler);
};
// simple_handler.cpp
#include "cefsimple/simple_handler.h"
#include <sstream>
#include <string>
#include "cefsimple/util.h"
#include "include/cef_app.h"
#include "include/cef_runnable.h"
namespace {
SimpleHandler* g_instance = NULL;
D. 學習java需要什麼軟體java編程軟體哪個好
學習java要什麼軟體?java編程軟體哪個好?昌平北大青鳥java培訓小編為你詳細解答!
一、JDK(JavaDevelopmentKit)
JDK是整個Java的核心,包括了Java運行環境(JavaRuntimeEnvirnment),一堆Java工具和Java基礎的類庫(rt.jar)。不論什麼Java應用伺服器實質都是內置了某個版本的JDK。因此掌握JDK是學好Java的第一步。最主流的JDK是Sun公司發布的JDK,除了Sun之外,還有很多公司和組織都開發了自己的JDK,例如IBM公司開發的JDK,BEA公司的Jrocket,還有GNU組織開發的JDK等等。其中IBM的JDK包含的JVM(JavaVirtualMachine)運行效率要比SunJDK包含的JVM高出許多。而專門運行在x86平台的Jrocket在服務端運行效率也要比SunJDK好塌派鎮很多。但不管怎麼說,我們還是需要先把SunJDK掌握好。
1、JDK的下載和安裝
JDK又叫做J2SE(Java2SDKStandardEdition),可以從Sun的Java網站上下載到,#/j2se/downloads.html;,JDK當前最新的版本是J2SDK1.4.2,建議下載該版本的JDK,下載頁面在這里:http://#/j2se/1.4.2/download.html。
下載好的JDK是一個可執行安裝程序,默認安裝完畢後會在C:ProgramFilesJava目錄下安裝一套JRE(供瀏覽器來使用),在C:j2sdk1.4.2下安裝一套JDK(也包括一套JRE)。然後我們需要在環境變數PATH的最前面增加java的路徑C:j2sdk1.4.2in。這樣JDK就安裝好了。
2、JDK的命令工具
JDK的最重要命令行工具:
java:啟動JVM執行class
javac:Java編譯器
jar:Java打包工具
javadoc:Java文檔生成器
這些命令行必須要非常羨物非常熟悉,對於每個參數都要很精通才行。對於這些命令的學習,JDKDocumentation上有詳細的文檔。
二、JDKDocumentation
Documentation在JDK的下載頁面也有下載連接,建議同時下載Documentation。Documentation是最最重要的編程手冊,涵蓋了整個Java所有方面的內容的描述。可以這樣說,學習Java編程,大部分時間都是花在看這團粗個Documentation上面的。我是隨身攜帶的,寫Java代碼的時候,隨時查看,須臾不離手。
三、應用伺服器(AppServer)
AppServer是運行Java企業組件的平台,構成了應用軟體的主要運行環境。當前主流的AppServer是BEA公司的WeblogicServer和IBM公司的Websphere以及免費的Jboss,選擇其中一個進行學習就可以了,個人推薦Weblogic,因為它的體系結構更加干凈,開發和部署更加方便,是Java企業軟體開發人員首選的開發平台。下面簡要介紹幾種常用的AppServer:
1、Tomcat
Tomcat嚴格意義上並不是一個真正的AppServer,它只是一個可以支持運行Serlvet/JSP的Web容器,不過Tomcat也擴展了一些AppServer的功能,如JNDI,資料庫連接池,用戶事務處理等等。Tomcat被非常廣泛的應用在中小規模的JavaWeb應用中,因此本文做一點下載、安裝和配置Tomcat的介紹:
Tomcat是Apache組織下Jakarta項目下的一個子項目,它的主網站是:#/tomcat/;,Tomcat最新版本是Tomcat4.1.27,軟體下載的連接是:http://#/dist/jakarta/tomcat-4/binaries/;。
下載Tomcat既可以直接下載zip包,也可以下載exe安裝包(個人建議zip更干凈些),不管哪種情況,下載完畢安裝好以後(zip直接解壓縮就可以了)。需要設置兩個環境變數:
JAVA_HOME=C:j2sdk1.4.2
CATALINA_HOME=D: omcat4(你的Tomcat安裝目錄)
這樣就安裝好了,啟動Tomcat運行CATALINA_HOMEinstartup.bat,關閉Tomcat運行shutdown.bat腳本。Tomcat啟動以後,默認使用8080埠,因此可以用瀏覽器訪問http://localhost:8080來測試Tomcat是否正常啟動。
Tomcat提供了兩個Web界面的管理工具,URL分別是:
http://localhost:8080/admin/index.jsp;
http://localhost:8080/manager/html;
在啟用這兩個管理工具之前,先需要手工配置一下管理員用戶和口令。用一個文本工具打開CATALINA_HOMEconf omcat-users.xml這個文件,加入如下幾行:
這樣用戶「robbin」就具備了超級管理員許可權。重新啟動Tomcat以後,你就可以使用該用戶來登陸如上的兩個管理工具,通過Web方式進行Tomcat的配置和管理了。
2、BEAWeblogic
Weblogic可以到BEA的網站上免費注冊之後下載到最新的Weblogic8.1企業版,License可以免費使用1年時間,其實這已經完全足夠了。Weblogic的下載連接:#/index.jsp,Weblogic的在線文檔:http://#/;。
3、IBMWebshpere
Websphere同樣可以下載到免費的試用版本,到IBM的developerWorks網站可以看到Websphere試用產品的下載和相關的Websphere的資料,developerWorks中文網站的連接是:#/developerWorks/cn/wsdd/;,Websphere的下載連接:http://#/wsdd/downloads/WASsupport.html;。
4、Jboss
Jboss是免費開源的AppServer,可以免費的從Jboss網站下載:#/index.html,然而Jboss的文檔是不免費,需要花錢購買,所以為我們學習Jboss設置了一定的障礙。在Jdon上有幾篇不錯的Jboss配置文檔,可以用來參考:http://#/idea.html;
四、Java應用的運行環境
Java的應用可以簡單分為以下幾個方面:
1、Java的桌面應用
桌面應用一般僅僅需要JRE的支持就足夠了。
2、JavaWeb應用
Java的Web應用至少需要安裝JDK和一個web容器(例如Tomcat),以及一個多用戶資料庫,Web應用至少分為三層:
Browser層:瀏覽器顯示用戶頁面
Web層:運行Servlet/JSP
DB層:後端資料庫,向Java程序提供數據訪問服務
3、Java企業級應用
企業級應用比較復雜,可以擴展到n層,最簡單情況會分為4層:
Browser層:瀏覽器顯示用戶頁面
Client層:Java客戶端圖形程序(或者嵌入式設備的程序)直接和Web層或者EJB層交互
Web層:運行Servlet/JSP
EJB層:運行EJB,完成業務邏輯運算
DB層:後端資料庫,向Java程序提供數據訪問服務
4、Java嵌入式應用
Java嵌入式應用是一個方興未艾的領域,從事嵌入式開發,需要從Sun下載J2ME開發包,J2ME包含了嵌入式設備專用虛擬機KVM,和普通的JDK中包含的JVM有所不同。另外還需要到特定的嵌入式廠商那裡下載模擬器。