問題一:怎樣提取一個(gè)軟件的源代碼 想看到源代碼?我覺得不可能,不是有些嘩序不能看到,而是所有的程序通過正當(dāng)?shù)耐緩蕉疾荒芸吹皆创a,除非這個(gè)程序是你自個(gè)寫的。因?yàn)閹缀跛械某绦蛟诎l(fā)布之前都會(huì)進(jìn)行加密、加殼的操作。即使你知道人家采用什么技術(shù)進(jìn)行的加密也不太可能會(huì)原樣的還原出來源代碼。所謂的破解也并不是把原程序的源代碼給還原了之后給你破解的。破解軟件也只不過是反編譯了軟件的匯編代碼而已!
在尋甸等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),全網(wǎng)整合營(yíng)銷推廣,成都外貿(mào)網(wǎng)站建設(shè)公司,尋甸網(wǎng)站建設(shè)費(fèi)用合理。
問題二:怎樣獲取軟件的源代碼 這個(gè)問題,如果僅有EXE,是不可能獲取到源碼的。
除非你跟開發(fā)者要。
問題三:怎么從excel表格里提取源代碼? 例如表的名稱是sheet1,則在sheet1的標(biāo)簽上點(diǎn)右鍵,查看代碼就行
問題四:怎么才能得到一個(gè)軟件的源代碼 你好。
軟件源代碼一般來說就是軟件公司產(chǎn)品發(fā)布時(shí)間一定期限后,自己公布出來的。
當(dāng)然。使用反編譯也是可以的。不過破解工作很復(fù)雜,足夠再開發(fā)新軟件了。得不償失。
問題五:求一款網(wǎng)站源碼提取工具 20分 這種軟件是沒有的
因?yàn)橐@取整站源碼 必須獲取空間的權(quán)限
才能整站下載
否則獲取的是網(wǎng)站模板
問題六:如何用apktool提取源代碼 準(zhǔn)備的工具除了jdk還有以下內(nèi)容(在Google官網(wǎng)都有):
把a(bǔ)pktool-install-windows-2.1_r01-1.zip,dex2jar-0.0.7-SNAPSHOT.zip解壓到一個(gè)盤的根目錄下(這里我選擇H盤),同時(shí)把AXMLPrinter2.jar,apktool.jar和你想解包的apk軟件也放在同一個(gè)目錄下,然后“運(yùn)行--cmd”打開控制臺(tái),輸入cd /d h : / 進(jìn)入H盤的根目錄然后輸入以下內(nèi)容(控制臺(tái)不要關(guān),為了后面方便):
其中apktool.jar是解包工具,d表示解包,memo.apk是我要解包的軟件,memo表示解包后輸出到這個(gè)文件夾,等待片刻,就會(huì)生成memo文件夾,打開里面會(huì)有res文件夾下的所有文件和AndroidManifest.xml,用記事本就可以查看了。
以上是獲得.xml文件和圖片,下面獲得里面的.java源代碼:
用winRar或者好壓打開memo.apk,截圖如下:
把里面的classes.dex文件解壓到H盤根目錄下,然后重新打開控制臺(tái),輸入dex2jar.bat classes.dex
得到一個(gè)名為classes.dex.dex2jar.jar的文件,此時(shí)用jd-gui.exe打開classes.dex.dex2jar.jar就可以看到所有源代碼了!
如果想把反編譯好的文件變回apk文件,只要在控制臺(tái)輸入
apktool.jar b memo就可以了
其中b就是重新封包的意思,memo是你剛才解包出來的文件夾,前提是確保所有文件都在memo文件夾里!!
問題七:能不能破解一個(gè)軟件從而獲得其所有源代碼? 你是在說反編譯嗎?沒有軟件可以反編譯。只能靠人來反編譯,但十分麻煩。
問題八:.apk文件能獲取源代碼嗎? 你做的APP 為什么你不知道源碼。
在沒有做混淆處理的情況下 是可以通過程序反編譯出來的,源碼也可以得到。
做了混淆的話,就比較棘手了
問題九:為什么無法獲得軟件源代碼? 編譯型軟件的源代碼幾乎無法獲取,可以這樣子給你解釋為什么從理論上無法獲?。?/p>
源代碼需要經(jīng)過編譯之后變成一連串的0和1,這一連串的0和1打包起來,就是我們?nèi)粘Kf的可執(zhí)行文件,也就是你平時(shí)用的軟件了。
OK,你想通過可執(zhí)行文件,也就是這一連串的和0和1逆推回源代碼,這幾乎是不可能的事情,因?yàn)楦呒?jí)語言的源代碼和最終生成的0和1不是死死的一一對(duì)應(yīng)關(guān)系。高級(jí)語言需要先被轉(zhuǎn)為匯編語言,然后匯編語言再轉(zhuǎn)為0和1,匯編語言與0和1是一一對(duì)應(yīng)關(guān)系的,但是高級(jí)語言和匯編語言就不一定了。
即便是同樣的幾句高級(jí)語言代碼,在不同的編譯器里面,也完全有可能是完全不同的匯編代碼。而且同樣邏輯的代碼,即便是只有稍微幾個(gè)關(guān)鍵字的不同,或者是變量的不同,都會(huì)產(chǎn)生不同的匯編代碼。
所以,由二進(jìn)制的0,1可執(zhí)行文件,逆推高級(jí)語言,理論上可行,實(shí)際上不可行,因?yàn)楣ぷ髁刻?。類似大型軟件,好幾個(gè)G的,那是多少億行的0和1,哪怕是全世界的程序員在一起逆推,都不知道需要多少年可以完全逆向出源代碼。
那我們平時(shí)所說的逆向工程是什么呢?
OK,其實(shí)軟件是可以逆向的,但是不是說逆向出真正的源代碼,而是逆向出這個(gè)軟件的匯編代碼。但是需要注意,匯編代碼在某種程度上并不能成為這個(gè)軟件的源代碼,因?yàn)閰R編代碼量極大,而且不具備良好的可讀性,一句普通的高級(jí)語言源代碼,可能就會(huì)生成好幾十條匯編代碼。所以匯編代碼量是極大的。
同時(shí),匯編代碼幾乎是不具備有架構(gòu)性的,也就是說,即便你拿到了一個(gè)軟件的匯編代碼,你最多就是稍稍改改一些關(guān)鍵邏輯,比如說注冊(cè)邏輯(用于破解)之類的,但是你要說通過匯編代碼去改這個(gè)軟件的功能,幾乎就是不可能的事情。所以,匯編代碼是無法用于開源的,你公開出來了,別人也沒精力去看。
java控制臺(tái)輸出由print( ) 和 println( )來完成最為簡(jiǎn)單。這兩種方法由rintStream(System.out引用的對(duì)象類型)定義。盡管System.out是一個(gè)字節(jié)流,用它作為簡(jiǎn)單程序的輸出是可行的。因?yàn)镻rintStream是從OutputStream派生的輸出流,它同樣實(shí)現(xiàn)低級(jí)方法write(),write()可用來向控制臺(tái)寫數(shù)據(jù)。PrintStream 定義的write( )的最簡(jiǎn)單的形式如下:
void write(int byteval)
該方法按照byteval指定的數(shù)目向文件寫字節(jié)。盡管byteval 定義成整數(shù),但只有低位的8個(gè)字節(jié)被寫入。下面的短例用 write()向屏幕輸出字符“A”,然后是新的行。
// Demonstrate System.out.write().
class WriteDemo {
public static void main(String args[]) {
int b;
b = 'A';
System.out.write(b);
System.out.write('\n');
}
}
一般不常用write()來完成向控制臺(tái)的輸出(盡管這樣做在某些場(chǎng)合非常有用),因?yàn)閜rint()和println() 更容易用。
四、PrintWriter類
盡管Java允許用System.out向控制臺(tái)寫數(shù)據(jù),但建議僅用在調(diào)試程序時(shí)或在例程中。對(duì)于實(shí)際的程序,Java推薦的向控制臺(tái)寫數(shù)據(jù)的方法是用PrintWriter流。PrintWriter是基于字符的類。用基于字符類向控制臺(tái)寫數(shù)據(jù)使程序更為國(guó)際化。PrintWriter定義了多個(gè)構(gòu)造函數(shù),這里所用到的一個(gè)如下:
PrintWriter(OutputStream outputStream, boolean flushOnNewline)
outputStream是OutputStream類的對(duì)象,flushOnNewline控制Java是否在println()方法被調(diào)用時(shí)刷新輸出流。如果flushOnNewline為true,刷新自動(dòng)發(fā)生,若為false,則不發(fā)生。
PrintWriter支持所有類型(包括Object)的print( )和println( )方法,這樣,就可以像用ystem.out那樣用這些方法。如果遇到不同類型的情況,PrintWriter方法調(diào)用對(duì)象的toString()方法并打印結(jié)果。用PrintWriter向外設(shè)寫數(shù)據(jù),指定輸出流為System.out并在每一新行后刷新流。例如這行代碼創(chuàng)建了與控制臺(tái)輸出相連的PrintWriter類。
PrintWriter pw = new PrintWriter(System.out, true);
下面的應(yīng)用程序說明了用PrintWriter處理控制臺(tái)輸出的方法:
// Demonstrate PrintWriter
import java.io.*;
public class PrintWriterDemo {
public static void main(String args[]) {
PrintWriter pw = new PrintWriter(System.out, true);
pw.println("This is a string");
int i = -7;
pw.println(i);
double d = 4.5e-7;
pw.println(d);
}
}
該程序的輸出如下:
This is a string
-7
4.5E-7
io包支持Java的基本I/O(輸入/輸出)系統(tǒng),包括文件的輸入/輸出。對(duì)輸入/輸出的支持是來源于Java的內(nèi)核API庫,而不是語言關(guān)鍵字。
一、輸入/輸出基礎(chǔ)
很多實(shí)際的Java應(yīng)用程序不是基于文本的控制臺(tái)程序。盡管基于文本的程序作為教學(xué)實(shí)例是很出色的,它們無法勝任JAVA在實(shí)際中的重要應(yīng)用。Java對(duì)外設(shè)輸入/輸出的支持也是有限的,并且用起來有些笨拙——甚至是在簡(jiǎn)單的例子程序中?;谖谋镜目刂婆_(tái)輸入/輸出對(duì)于Java程序并不是十分重要。
Java 提供了與文件和網(wǎng)絡(luò)相關(guān)的強(qiáng)大的和靈活的輸入/輸出支持,Java的輸入/輸出系統(tǒng)是緊密相連并且是具有一致性的。
1.1 流的概念
Java程序通過流來完成輸入/輸出。流是生產(chǎn)或消費(fèi)信息的抽象。流通過Java的輸入/輸出系統(tǒng)與物理設(shè)備鏈接。盡管與它們鏈接的物理設(shè)備不盡相同,所有流的行為具有同樣的方式。這樣,相同的輸入/輸出類和方法適用于所有類型的外部設(shè)備。這意味著一個(gè)輸入流能夠抽象多種不同類型的輸入:從磁盤文件,從鍵盤或從網(wǎng)絡(luò)套接字。同樣,一個(gè)輸出流可以輸出到控制臺(tái),磁盤文件或相連的網(wǎng)絡(luò)。流是處理輸入/輸出的一個(gè)潔凈的方法,例如它不需要代碼理解鍵盤和網(wǎng)絡(luò)的不同。Java中流的實(shí)現(xiàn)是在java.io包定義的類層次結(jié)構(gòu)內(nèi)部的。
1.2 字節(jié)流和字符流
要使用流類,必須導(dǎo)入Java.io包。Java 2 定義了兩種類型的流:字節(jié)類和字符類。字節(jié)流(byte stream)為處理字節(jié)的輸入和輸出提供了方便的方法。例如使用字節(jié)流讀取或書寫二進(jìn)制數(shù)據(jù)。字符流(character stream)為字符的輸入和輸出處理提供了方便。它們采用了統(tǒng)一的編碼標(biāo)準(zhǔn),因而可以國(guó)際化。在某些場(chǎng)合,字符流比字節(jié)流更有效。在最底層,所有的輸入/輸出都是字節(jié)形式的。基于字符的流只為處理字符提供方便有效的方法。下面是對(duì)字節(jié)流和字符流的概述。
1.2.1 字節(jié)流類
字節(jié)流由兩個(gè)類層次結(jié)構(gòu)定義。在頂層有兩個(gè)抽象類:InputStream 和 OutputStream。每個(gè)抽象類都有多個(gè)具體的子類,這些子類對(duì)不同的外設(shè)進(jìn)行處理,例如磁盤文件,網(wǎng)絡(luò)連接,甚至是內(nèi)存緩沖區(qū)。字節(jié)流類顯示于表1-1中。
表1-1 字節(jié)流類
流類 含義
BufferedInputStream緩沖輸入流
BufferedOutputStream緩沖輸出流
ByteArrayInputStream從字節(jié)數(shù)組讀取的輸入流
ByteArrayOutputStream向字節(jié)數(shù)組寫入的輸出流
DataInputStream包含讀取Java標(biāo)準(zhǔn)數(shù)據(jù)類型方法的輸入流
DataOutputStream包含編寫Java標(biāo)準(zhǔn)數(shù)據(jù)類型方法的輸出流
FileInputStream讀取文件的輸入流
FileOutputStream寫文件的輸出流
FilterInputStream實(shí)現(xiàn)InputStream
FilterOutputStream實(shí)現(xiàn)OutputStream
InputStream描述流輸入的抽象類
OutputStream描述流輸出的抽象類
PipedInputStream輸入管道
PipedOutputStream輸出管道
PrintStream包含print()和println()的輸出流
PushbackInputStream 支持向輸入流返回一個(gè)字節(jié)的單字節(jié)的“unget”的輸入流
RandomAccessFile支持隨機(jī)文件輸入/輸出
SequenceInputStream兩個(gè)或兩個(gè)以上順序讀取的輸入流組成的輸入流
抽象類InputStream 和 OutputStream定義了實(shí)現(xiàn)其他流類的關(guān)鍵方法。最重要的兩種方法是read()和write(),它們分別對(duì)數(shù)據(jù)的字節(jié)進(jìn)行讀寫。兩種方法都在InputStream 和OutputStream中被定義為抽象方法。它們被派生的流類重載。
1.2.2 字符流類
字符流類由兩個(gè)類層次結(jié)構(gòu)定義。頂層有兩個(gè)抽象類:Reader和Writer。這些抽象類處理統(tǒng)一編碼的字符流。Java中這些類含有多個(gè)具體的子類。字符流類如表1-2所示。
表1-2 字符流的輸入/輸出類
抽象類Reader和Writer定義了幾個(gè)實(shí)現(xiàn)其他流類的關(guān)鍵方法。其中兩個(gè)最重要的是read()和write(),它們分別進(jìn)行字符數(shù)據(jù)的讀和寫。這些方法被派生流類重載。
1.3 預(yù)定義流
所有的Java程序自動(dòng)導(dǎo)入java.lang包。該包定義了一個(gè)名為System的類,該類封裝了運(yùn)行時(shí)環(huán)境的多個(gè)方面。System 同時(shí)包含三個(gè)預(yù)定義的流變量,in,out和err。這些成員在System中是被定義成public 和static型的,這意味著它們可以不引用特定的System對(duì)象而被用于程序的其他部分。
System.out是標(biāo)準(zhǔn)的輸出流。默認(rèn)情況下,它是一個(gè)控制臺(tái)。System.in是標(biāo)準(zhǔn)輸入,默認(rèn)情況下,它指的是鍵盤。System.err指的是標(biāo)準(zhǔn)錯(cuò)誤流,它默認(rèn)是控制臺(tái)。然而,這些流可以重定向到任何兼容的輸入/輸出設(shè)備。System.in 是inputStream的對(duì)象;System.out和System.err是PrintStream的對(duì)象。它們都是字節(jié)流,盡管它們用來讀寫外設(shè)的字符。但可以用基于字符的流來包裝它們。
二、讀取控制臺(tái)輸入
在Java 1.0中,完成控制臺(tái)輸入的惟一途徑是字節(jié)流,使用該方法的老代碼依然存在。今天,運(yùn)用字節(jié)流讀取控制臺(tái)輸入在技術(shù)上仍是可行的,但這樣做需要用到不被贊成的方法,這種做法不值得推薦。Java 2中讀取控制臺(tái)輸入的首選方法是字符流,它使程序容易符合國(guó)際標(biāo)準(zhǔn)并且易于維護(hù)。
Java沒有像標(biāo)準(zhǔn)C的函數(shù)scanf()或C++輸入操作符那樣的統(tǒng)一的控制臺(tái)輸入方法。Java中,控制臺(tái)輸入由從System.in讀取數(shù)據(jù)來完成。為獲得屬于控制臺(tái)的字符流,在BufferedReader對(duì)象中包裝System.in。BufferedReader 支持緩沖輸入流查看批注。它最常見的構(gòu)造函數(shù)如下:
BufferedReader(Reader inputReader)
這里,inputReader是鏈接被創(chuàng)建的BufferedReader實(shí)例的流。Reader是一個(gè)抽象類。它的一個(gè)具體的子類是InputStreamReader,該子類把字節(jié)轉(zhuǎn)換成字符查看批注。為獲得鏈接System.in的一個(gè)InputStreamReader的對(duì)象,用下面的構(gòu)造函數(shù):
InputStreamReader(InputStream inputStream)
因?yàn)镾ystem .in引用了InputStream 類型的對(duì)象,它可以用于inputStream。綜上所述,下面的一行代碼創(chuàng)建了與鍵盤相連的BufferedReader對(duì)象。
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
當(dāng)該語句執(zhí)行后,br是通過System.in生成的鏈接控制臺(tái)的字符流。
2.1 讀取字符
從BufferedReader讀取字符,用read()。這里所用的read()版本如下:
int read( ) throws IOException
該方法每次執(zhí)行都從輸入流讀取一個(gè)字符然后以整型返回。當(dāng)遇到流的末尾時(shí)它返回-1??梢钥吹?,它要引發(fā)一個(gè)IOException異常。下面的例程演示了read()方法,從控制臺(tái)讀取字符直到用戶鍵入“q”:
// Use a BufferedReader to read characters from the console.
import java.io.*;
class BRRead {
public static void main(String args[])
throws IOException
{
char c;
BufferedReader br = new
BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter characters, 'q' to quit.");
// read characters
do {
c = (char) br.read();
System.out.println(c);
} while(c != 'q');
}
}
下面是程序運(yùn)行:
Enter characters, 'q' to quit.
123abcq
1
2
3
a
b
c
q
2.2 讀取字符串
從鍵盤讀取字符串,使用readLine()。它是BufferedReader 類的成員。它的通常形式如下:
String readLine( ) throws IOException
它返回一個(gè)String對(duì)象。下面的例子闡述了BufferedReader類和readLine()方法;程序讀取和顯示文本的行直到鍵入“stop”:
// Read a string from console using a BufferedReader.
import java.io.*;
class BRReadLines {
public static void main(String args[])
throws IOException
{
// create a BufferedReader using System.in
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
String str;
System.out.println("Enter lines of text.");
System.out.println("Enter 'stop' to quit.");
do {
str = br.readLine();
System.out.println(str);
} while(!str.equals("stop"));
}
}
下面的例程生成了一個(gè)小文本編輯器。它創(chuàng)建了一個(gè)String對(duì)象的數(shù)組,然后依行讀取文本,把文本每一行存入數(shù)組。它將讀取到100行或直到按“stop”才停止。該例運(yùn)用一個(gè)BufferedReader類來從控制臺(tái)讀取數(shù)據(jù)。
// A tiny editor.
import java.io.*;
class TinyEdit {
public static void main(String args[])
throws IOException
{
// create a BufferedReader using System.in
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
String str[] = new String[100];
System.out.println("Enter lines of text.");
System.out.println("Enter 'stop' to quit.");
for(int i=0; i100; i++) {
str[i] = br.readLine();
if(str[i].equals("stop")) break;
}
System.out.println("\nHere is your file:");
// display the lines
for(int i=0; i100; i++) {
if(str[i].equals("stop")) break;
System.out.println(str[i]);
}
}
}
下面是輸出部分:
Enter lines of text.
Enter ‘stop’ to quit.
This is line one.
This is line two.
Java makes working with strings easy.
Just create String objects.
stop
Here is your file:
This is line one.
This is line two.
Java makes working with strings easy.
Just create String objects.
步驟:
1、在cmd中切換到編寫的代碼所保存的目錄下;
2、在cmd中輸入javac然后點(diǎn)空格,再點(diǎn)擊文件名和包括后綴名確定后,在存放編寫代碼的文件下會(huì)生成一個(gè)class的字節(jié)碼文件;
3、在cmd中輸入java然后點(diǎn)空格,輸入第二步中生成的字節(jié)碼的文件名,不需要后綴名,點(diǎn)擊確定即可運(yùn)行代碼。
代碼就是程序員用開發(fā)工具所支持的語言寫出來的源文件,是一組由字符、符號(hào)或信號(hào)碼元以離散形式表示信息的明確的規(guī)則體系。計(jì)算機(jī)代碼稱為源代碼,是相對(duì)目標(biāo)代碼和可執(zhí)行代碼而言的。 源代碼就是用匯編語言和高級(jí)語言寫出來的地代碼,目標(biāo)代碼是指源代碼經(jīng)過編譯程序產(chǎn)生的能被cpu直接識(shí)別二進(jìn)制代碼。
當(dāng)前文章:java怎么輸出源代碼 java源代碼怎么運(yùn)行
網(wǎng)址分享:http://muchs.cn/article8/dopodop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、虛擬主機(jī)、定制開發(fā)、用戶體驗(yàn)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)