當前位置:首頁 » 編程軟體 » img反編譯

img反編譯

發布時間: 2022-01-08 20:08:46

『壹』 如何反編譯 android 中 /data/dalvik-cache/arm 下的文件

所有的 apk 內包含一個 classes.dex 文件。在 Dalvik上,apk包里的 dex文件在安裝的時候會通過 dexopt 轉化成另一個格式,叫odex(Opitimized dex),然後存在 /data/dalvik-cache裡面,如:

/data/dalvik-cache/data@[email protected]@classes.dex
雖然文件後綴還是 .dex,但是這個dex和apk內的那個已經不一樣了。這個文件是針對當前機器的硬體對 dex 文件進行了定製化,也就是說把這個放到別的設備上,不一定能運行。

PS: 在要編譯 rom 的時候,如果參數加上 "WITH_DEXPREOPT=true",會在 /system/app/ 下同時生成 .apk 和 .odex 文件(注意,這里後綴又用的 .odex,但實際上和系統在 /data/dalvik-cache/ 下的 .dex文件是一樣的)

ART

在 ART上,apk 包里的 dex文件在安裝的時候通過 dex2oat,也會生成一個後綴為 .dex 的文件,放在 /data/dalvik-cache中,如:

/data/dalvik-cache/arm/system@app@[email protected]@classes.dex
/data/dalvik-cache/arm64/system@vendor@app@[email protected]@classes.dex
這個文件後綴叫 .dex ,但是這個文件又不一樣了,這個既不是 dex 也不是 odex,用 dex2jar 的無法進行反編譯的。文件格式也完全不同,因為這其實就是一個實打實的 elf文件,這個文件已經可以直接在機器上運行了。

為何 pm.jar 是空的?

首先來了解一下 ROM 的編譯選項,看一下編譯的時候能做什麼事情, 大致了解就行了 。

編譯選項

WITH_DEXPREOPT

使能編譯時生成 OAT,避免第一次開機時編譯耗時,但會增大 system分區的空間消耗

DONT_DEXPREOPT_PREBUILTS

使能後,將不會對 Android.mk中包含了 include $(BUILD_PREBUILT)的 Apk進行 oat,例如 Gmail,它很可能會在後期通過商店自行升級,而升級後系統中的 oat文件則沒有意義了,但又無法刪除,會造成空間的浪費(oat比dex文件要大)

WITH_DEXPREOPT_BOOT_IMG_ONLY

僅僅針對 boot.img進行oat優化(boot.img中包含 boot.art和 boot.oat)

LOCAL_DEX_PREOPT ture|false|nostripping

可用於各個 Android.mk,對每個 package進行單獨配置,當設置為 true時,dex文件將會從 apk中剔除,如果不想剔除可使用 nostripping WPRODUCT _DEX PREOPT_*

WPRODUCT__DEX_PREOPT_*

PRODUCT_DEX_PREOPT_BOOT_FLAGS

這里的參數將會傳至 dex2oat,控制 boot.img的編譯優化行為。

PRODUCT_DEX_PREOPT_DEFAULT_FLAGS

控制除 boot.img 外,其他(如 jar, apk)的 OAT編譯行為 例如:

PRODUCT_DEX_PREOPT_DEFAULT_FLAGS := --compiler- filter=interpret-only
$(call add-proct-dex-preopt-mole- config,services,--compiler-filter=space)
WITH_DEXPREOPT_PIC ture|false

使能 position-independent code,這樣在dex2oat編譯生成的 odex文件在運行時將不必再從 /system 下拷貝到 /data/dalvik-cache/ 目錄下, 可以節省 /data 空間

WITH_ART_SMALL_MODE true|false

設置為 true 時,將只編譯處於 boot classpath 里的類,其他的均不編譯,這樣既能加快第一次開機時間,因為大部分必要的類已經編譯過了; 同時也能節省不少空間,因為 APP 都未進行編譯。缺點是可能損失一性能,這可能要平時覺察不出,但在跑分軟體上會有所體現

編譯選項的經典配置

為了提高第一次開機速度,WITH_DEXPREOPT是必須使能的,這樣則在編譯階段會完成 dex2oat的操作,避免在開機時間去做這個轉碼,節省了開機時間(6min以上縮短2min內)。

但會引起一個缺點,那就是 apk中還是包含了 class.dex(dexopt生成的),同時在對應的apk文件夾中又生成了已經轉碼成oat的 class.odex(dex2oat生成的),相當於這部分重復,造成了大量的空間浪費。

為了把 apk包里的 class.dex去除,節省空間,可以打開 DEX PREOPT DEFAULT := ture。

然而,這樣開機速度是快了,而且節省了不少system空間,但開機後,咱們會發現即使在 system中已經存在 class.odex的 apk,第一次開機後還是會在 /data下面生成 class.odex,如data/dalvik-cache/arm64/system@app@[email protected]@classes.dex,這是何解?原來 Google為了提高安全性,在每一台機器開機時都會在之前的機器碼加一個隨機的偏移量,這個偏移量是隨機的,每台機器都不相同,而 data分區下的這些文件就是從 system下的 class.odex加上偏移而來。

『貳』 有沒有將.IMG的文件反編譯成.c的工具啊

這幾乎是不可能的。IMG文件是?通常這么底層的編譯語言都沒有很好的反編譯工具,因為太靈活了。

『叄』 unity webgl能反編譯嗎

可以的
加密原理(無需Unity源碼):

1. IDA Pro打開libmono.so, 修改mono_image_open_from_data_with_name為
mono_image_open_from_data_with_name_0,
2. 替換實現mono_image_open_from_data_with_name,
extern mono_image_open_from_data_with_name_0(...);
mono_image_open_from_data_with_name(...) {
MonoImage *img = mono_image_open_from_data_with_name_0(...);
//發現數據文件頭不是DLL前綴則解密 img->raw_data, 相應修改img->raw_data_len
return img;
}
3. 重新打包libmono.so; 替換Unity3D中的android下的版本.
4. 另外寫個加密的工具,植入構建環境(MonoDeveloper或VS,添加一個打包後Build Phase來加密DLL); (IOS下禁用JIT固採用AOT編譯,DLL中沒有邏輯代碼,所以無需操心);

『肆』 如何反編譯IMG(內核)文件

先介紹一下編譯核心的選項,希望能對大家消除對內核的神秘感有所幫助。
1.代碼成熟等級
2..處理器類型和特色
3.對模塊的支持
4.基本的選擇
5.即插即用支持
6.塊設備支持
7.網路選項
8.電話支持
9.SCSI設備的支持
10.I2O介面適配器
11.網路設備支持
12.配置業余無線廣播
13.紅外支持
14.ISDN的文件系統
15.舊型的光碟機類型(非IDE界面的光碟機)
16.字元設備
17.USB支持
18.文件系統
19.控制台驅動
20.音效卡驅動
21.Kernel hacking
第二節 內核版本
由於linux的源程序是完全公開的,任何人只要遵循GPL,就可以對內核加以修改並發布
給他人使用。Linux的開發採用的是集市模型(bazaar,與cathedral--教堂模型--對應
),為了確保這些無序的開發過程能夠有序地進行,Linux採用了雙樹系統。一個樹是穩
定樹(stable tree),另一個樹是非穩定樹(unstable tree)或者開發樹(developm
ent tree)。一些新特性、實驗性改進等都將首先在開發樹中進行。如果在開發樹中所
做的改進也可以應用於穩定樹,那麼在開發樹中經過測試以後,在穩定樹中將進行相同
的改進。一旦開發樹經過了足夠的發展,開發樹就會成為新的穩定樹。開發數就體現在
源程序的版本號中;源程序版本號的形式為x.y.z:對於穩定樹來說,y是偶數;對於開
發樹來說,y比相應的穩定樹大一(因此,是奇數)。確定是以″ root ″的身份簽入,
然後cd 到 /usr/src 。uname -r 這個指令將會顯示版本。內核版本的更新可以訪問<h
ttp://www.kernel.org/>。
第三節 編譯原因
Linux作為一個自由軟體,在廣大愛好者的支持下,內核版本不斷更新。新的內核修訂了
舊內核的bug,並增加了許多新的特性。如果用戶想要使用這些新特性,或想根據自己的
系統度身定製一個更高效,更穩定的內核,就需要重新編譯內核。
通常,更新的內核會支持更多的硬體,具備更好的進程管理能力,運行速度更快、更穩
定,並且一般會修復老版本中發現的許多漏洞等,經常性地選擇升級更新的系統內核是
Linux使用者的必要操作內容。

為了正確的合理地設置內核編譯配置選項,從而只編譯系統需要的功能的代碼,一般主
要有下面四個考慮:
---自己定製編譯的內核運行更快(具有更少的代碼)
---系統將擁有更多的內存(內核部分將不會被交換到虛擬內存中)
---不需要的功能編譯進入內核可能會增加被系統攻擊者利用的漏洞
---將某種功能編譯為模塊方式會比編譯到內核內的方式速度要慢一些
以上是針對成熟的Linux套件如Redhat Linux而言,我的目的是為建造嵌入式Linux操作系
統做准備,也是必由之路。
第四節 准備工作
第一部分 新版本內核的獲取和更新
Linux內核版本發布的官方網站是< http://www.kernel.org/>,國內各大ftp上一般都可
以找到某些版本的內核。新版本的內核的發布有兩種形式,一種是完整的內核版本,另
外一種是patch文件,即補丁。完整的內核版本比較大,比如linux-2.4.0-test8.tar.b
z2就有18M之多。完整內核版本一般是.tar.gz(.tgz)文件或者是.bz2文件,二者分別
是使用gzip或者bzip2進行壓縮的文件,使用時需要解壓縮。patch文件則比較小,一般
只有幾十K到幾百K,極少的會超過1M。但是patch文件是針對於特定的版本的,需要找到
自己對應的版本才能使用。
編譯內核需要root許可權。把需要升級的內 拷貝到/usr/src/下(下文中以2.2.16的內核
的linux-2.2.16tar.gz為例),命令為
#cp linux-2.2.16tar.gz /usr/src
先查看當前/usr/src的內容,注意到有一個linux的符號鏈接,它指向一個類似於linux
-2.2.14(對應於現在使用的內核版本號)的目錄。首先刪除這個鏈接:
#cd /usr/src
#rm -f linux
現在解壓下載的源程序文件。如果所下載的是.tar.gz(.tgz)文件,使用命令:
#tar -xzvf linux-2.2.16tar.gz
如果下載的是.bz2文件,例如linux-2.2.16tar.bz2,使用命令
#bzip2 -d linux-2.2.16tar.bz2
#tar -xvf linux-2.2.16tar

現在再來看一下/usr/src下的內容,發現現在有了一個名為linux的目錄,裡面就是需要
升級到的版本的內核的源程序。還記得那個名為linux的鏈接么?之所以使用那個鏈接就
是防止在升級內核的時候會不慎把原來版本內核的源程序給覆蓋掉了。現在也需要同樣
處理:
#mv linux linux-2.2.16
#ln -s linux-2.2.16 linux

如果還下載了patch文件,比如patch-2.2.16,就可以進行patch操作(下面假設patch-
2.2.16已經位於/usr/src目錄下了,否則需要先把該文件拷貝到/usr/src下):
#patch -p0 < patch-2.2.16
第二部分 准備主機板和相關硬體的說明手冊
其實也不用太詳細,只要知道您的硬體是屬於哪一類型就行了。例如:有一張SCSI卡,
那就要知道這張卡的名字,有一台cd-rom,就要知道這台光碟機是哪一種牌子的,是否為標
準的IDE/ATAPI界面,還是另有專屬介面卡呢?或者,主機版是否有支持Triton晶元(通
常586以上的電腦常有),這些信息能幫助我們,使得設定變得清楚且容易。
因此,不管您有什麼使用手冊,准備好吧。即使現在不用,將來還是會用到的(設X-w
indow system時要顯示卡的手冊)。
第三部分 檢查音效卡的IRQ設定和其種類
如果配有一張音效卡,除了要知道卡的種類外(例如 Sound Blaster)還需要知道這張卡
的IRQ地址。一般來說,盧卡的IRQ地址是5或7而IO地址則為220。DMA則l,不過,有時不
同的音效卡可能會有不同的設定。因為稍後的選項里,就會要填入這些數字。
第四部分 編譯核心的硬體需求
在編譯核心時,確定您的RAM最好在8MB以上, 否則可能會很慢而且問題會很多,記得查
看swap有沒有打開(用free指令)。此外,最好不要超頻,不然很有可能會發生signal
11的錯誤,使得編到一半的核心停了下來,其實編譯核心就好比編譯程序一樣,只是因
為構成核心的程序太多了,因此我們能小心盡量小心。

『伍』 請問下安卓4.2.2的systeam.img怎樣解包,以及線刷改卡刷包

到官方網站下載rom包,找一張內存卡,儲存到卡里,然後將卡插入手機,三鍵同按,就會開始卡刷,不過,這屬於強制刷機,也就是說任何情況都能進行,包括手機黑屏死機什麼的。

『陸』 file.read()讀取的位元組數據怎麼反編譯恢復成源文件中的數據、字母或文字。

由於課程原因,用到了其中的離線手寫漢字型檔(HWDB1.1trn_gnt與HWDB1.1tst _gnt)的數據。這些數據以.gnt格式存儲,解碼後可以得到3755個常用漢字的各300個樣本。按照CASIA的建議,240個不同的書寫者的樣本作為training set,剩餘60位書寫者的樣本作為testing set, 則共有897758個training sample, 223991個testing sample. 本文提供一段python腳本,可以直接將其中的數據存儲成numpy數組文件(.npy文件)。只是,由於圖像位置及大小對齊處理的原因,代碼效率不是很高,執行起來需要的時間有點久:

Intel Core i7-4710MQ
16GB DDR3L RAM123

配置下,training set由.gnt文件轉成.npy文件共花費 78 分鍾。最終的結果文件有點大(training set 876MB, testing set 218M),可能存成.npy文件不如.h5文件更方便些。

另外,請大家在使用數據時遵守CASIA對於該資料庫數據的使用要求。

gnt格式定義見下圖:


如圖所示,文件的前4個位元組記錄了第一個字元數據與下一個字元數據之間的位元組數,比如這4個位元組是35656的話,第二個字元的數據就是從第35657個位元組開始(下標35656)。接下來的兩個位元組存儲該字元的GBK編碼,再下面的4個位元組記錄了字元圖片的寬度和高度,然後就是字元圖片的數據(按行存儲)。

所需依賴:

  • opencv (>=2.0)

  • numpy

  • 具體代碼如下:

  • # -*- coding: utf-8 -*-


  • from __future__ import print_function


  • import cv2

  • import numpy as np

  • import os

  • import struct

  • import sys

  • import zipfile


  • def gnt2npy(src_file, dst_file, image_size, map_file):

  • '''

  • 將gnt文件存為npy格式


  • param src_file: 源文件名,gnt文件

  • param dst_file: 目標文件名, 若此參數設置為'xxx',則會生成xxx_images.npy 和 xxx_labels.npy

  • param image_size: 圖片大小,設置為m時,最終文件的大小將為 m x m

  • param map_file: 由於漢字編碼不連續,作為分類label並不合適,該文件保存漢字碼和label的映射關系

  • '''


  • code_map = {}

  • if os.path.exists(map_file):

  • with open(map_file, 'r') as fp:

  • for line in fp.readlines():

  • if len(line) == 0:

  • continue;

  • code, label = line.split()

  • code_map[int(code)] = int(label)

  • fp.close()

  • images = []

  • labels = []


  • if zipfile.is_zipfile(src_file): #單體zip文件

  • zip_file = zipfile.ZipFile(src_file, 'r')

  • file_list = zip_file.namelist()

  • for file_name in file_list:

  • print("processing %s ..." % file_name)

  • data_file = zip_file.open(file_name)

  • total_bytes = zip_file.getinfo(file_name).file_size

  • image_list, label_list, code_map = readFromGnt(data_file, file_name, image_size, total_bytes, code_map)

  • images += image_list

  • labels += label_list

  • elif os.path.isdir(src_file): #包含gnt文件的文件夾

  • file_list = os.listdir(src_file)

  • for file_name in file_list:

  • file_name = src_file + os.sep + file_name

  • print("processing %s ..." % file_name)

  • data_file = open(file_name, 'rb')

  • total_bytes = os.path.getsize(file_name)

  • image_list, label_list, code_map = readFromGnt(data_file, image_size, total_bytes, code_map)

  • images += image_list

  • labels += label_list

  • else:

  • sys.stderr.write('Source file should be a ziped file containing the gnt files. Plese check your input again. ')

  • return None


  • with open(map_file, 'w') as fp:

  • for code in code_map:

  • print(code, code_map[code], file=fp)

  • fp.close()

  • np.save(dst_file + '_images.npy', images)

  • np.save(dst_file + '_labels.npy', labels)



  • def readFromGnt(data_file, image_size, total_bytes, code_map):

  • '''

  • 從文件對象中讀取數據並返回


  • param data_file, 文件對象

  • param image_size: 圖片大小,設置為m時,最終文件的大小將為m x m

  • param total_bytes: 文件總byte數

  • param code_map: 由於漢字編碼不連續,作為分類label並不合適,該dict保存漢字碼和label的映射關系

  • '''

  • decoded_bytes = 0

  • image_list = []

  • label_list = []

  • new_label = len(code_map)

  • while decoded_bytes != total_bytes:

  • data_length, = struct.unpack('<I', data_file.read(4))

  • tag_code, = struct.unpack('>H', data_file.read(2))

  • image_width, = struct.unpack('<H', data_file.read(2))

  • image_height, = struct.unpack('<H', data_file.read(2))

  • arc_length = image_width

  • if image_width < image_height:

  • arc_length = image_height

  • temp_image = 255 * np.ones((arc_length, arc_length ,1), np.uint8)

  • row_begin = (arc_length - image_height) // 2

  • col_begin = (arc_length - image_width) // 2

  • for row in range(row_begin, image_height + row_begin):

  • for col in range(col_begin, image_width + col_begin):

  • temp_image[row, col], = struct.unpack('B', data_file.read(1))

  • decoded_bytes += data_length

  • result_image = cv2.resize(temp_image, (image_size, image_size))

  • if tag_code not in code_map:

  • code_map[tag_code] = new_label

  • new_label += 1

  • image_list.append(result_image)

  • label_list.append(code_map[tag_code])


  • return image_list, label_list, code_map



  • if __name__=='__main__':


  • if len(sys.argv) < 5:

  • sys.stderr.write('Please specify source file, target file, image size and map file ')

  • sys.exit()


  • src_file = sys.argv[1]

  • dst_file = sys.argv[2]

  • image_size = int(sys.argv[3])

  • map_file = sys.argv[4]

  • gnt2npy(src_file, dst_file, image_size, map_file)

  • 10710810911011111114115

  • 命令格式舉例:python gnt2npy.py src target img_size map_file,以上參數中,gnt2npy為腳本文件名,可任意更改。src為源文件名,可以是只包含.gnt文件的zip包,也可以是將壓縮文件解壓後的文件夾名稱,target為目標文件名,假設該值為train則腳本執行後會生成train_images.npy與trian_labels.npy兩個文件,分別為圖像數據和對應的label。圖像的大小則可以通過第三個參數img_size指定,假設該值為32則圖像文件大小為32 x 32。另外,由於漢字的GBK編碼並不是從零開始,也不完全連續,作為分類的label不是很合適,因此在保存label時根據一定的規則將GBK編碼映射為數據的label,最後一個參數map_file則保存這種映射關系,第一次執行腳本時生成該文件,以後則可以通過該文件保證相同漢字,其label總是相同的。

    請注意,HWDB1.1trn_gnt.zip包含的其實是一個ALZ壓縮文件,因此請不要將該文件名直接作為參數傳入以上代碼,請將裡面的ALZ文件解壓後將文件夾的名字作為參數。

    此外,這個Github鏈接提供了預覽及保存圖片文件的工具,同樣可以用於該文件類型(.gnt)的數據提取,並且可以通過選擇使用的框架(Caffe/CNTK/TensorFlow/NvidiaDigits)將圖片文件按照不同的大小、格式保存。其中,win64_bianry.zip包含編譯好的X64二進制文件和一份簡單的使用說明,其他為源碼及源碼生成GUI需要用到的圖片和一個qt項目文件gntDecoder.pro,有興趣的話也歡迎大家下載源碼隨意修改。預編譯的X64程序運行時可能要求」api-ms-win-crt-runtime-l1-1-0.dll」,出現該信息的話請通過微軟官網或者機器中的Windows Update安裝KB2999226補丁(通用C運行庫)。

『柒』 apktool4.0怎麼反編譯和回編譯

您可以在安卓手機上反編譯回編譯安卓apk軟體而不需要藉助電腦。
apktool4.0推出!全新的bootimg解包打包機制,更可靠,更穩定。增加任務管理。解壓後的數據包體積大幅減小。如果apktool文件夾不是放在/sdcard下,需要先長按apktool文件夾,選擇「設為apktool數據目錄」。自動檢測機器是否已root,沒root的僅部分含(root)的選項不能正常工作。即使沒有root,也可以修改第三方軟體。

『捌』 android kernel 怎樣反編譯

好像不能反編譯吧,自己到xda論壇找源碼。如果手機廠官方沒有公開源碼,也沒辦法了

『玖』 字元串反編譯

要解決的問題:
將下面的URL作為一個參數傳到其他的頁面
1 http://domain/de.apx?uid=12&page=15
2 url後面的參數中出現漢字等,如: ....aspx?title=起重機
在出現上面的情況的時候,必須經過一個RUL編碼和解碼的過程,否則會出現錯誤.

代碼如下:
<a href="DictEdit.aspx?Dict=<%#Eval("SourceLang")%>&target=<%#Eval("TargetLang")%>&Email=<%#Eval("UserEmail")%>&Word=<%#System.Web.HttpUtility.UrlEncode(Eval("Word").ToString())%>"><img src="/img/mini_edit.gif" alt="編輯" /></a>

1//傳值
2string temp = " <a href='Add.aspx?url=" +Server.UrlEncode( skin.Page.Request.Url.AbsoluteUri )+ "&title=" +Server.UrlEncode( skin.Page.Header.Title )+ "'>添加到收藏夾</a>");
3
4//在另外一個文件中取從上面傳的值
5if (Request.QueryString["url"] != null)
6{
7 string url = Server.UrlDecode(Request.QueryString["url"].ToString());
8 this.txtAddress.Text = url;
9}
10if (Request.QueryString["title"] != null)
11{
12 string title = Server.UrlDecode(Request.QueryString["title"].ToString());
13 this.txtTitle.Text = title;
14}

原文鏈接在這里:)
http://www.cnblogs.com/lihuimingcn/archive/2008/11/04/1326433.html

『拾』 如何防止Unity3D代碼被反編譯

加密原理(無需Unity源碼):

1. IDA Pro打開libmono.so, 修改mono_image_open_from_data_with_name為
mono_image_open_from_data_with_name_0,
2. 替換實現mono_image_open_from_data_with_name,
extern mono_image_open_from_data_with_name_0(...);
mono_image_open_from_data_with_name(...) {
MonoImage *img = mono_image_open_from_data_with_name_0(...);
//發現數據文件頭不是DLL前綴則解密 img->raw_data, 相應修改img->raw_data_len
return img;
}
3. 重新打包libmono.so; 替換Unity3D中的android下的版本.
4. 另外寫個加密的工具,植入構建環境(MonoDeveloper或VS,添加一個打包後Build Phase來加密DLL); (IOS下禁用JIT固採用AOT編譯,DLL中沒有邏輯代碼,所以無需操心);

熱點內容
php字元串引號 發布:2024-09-21 08:17:03 瀏覽:783
androidduration 發布:2024-09-21 08:17:03 瀏覽:402
大話西遊2華山論劍什麼時候開的伺服器 發布:2024-09-21 08:00:15 瀏覽:530
編程馬鞍數 發布:2024-09-21 07:48:32 瀏覽:726
新建文件夾dos命令 發布:2024-09-21 07:44:13 瀏覽:131
舞蹈解壓介紹 發布:2024-09-21 07:40:04 瀏覽:973
qq如何顯示密碼 發布:2024-09-21 07:22:26 瀏覽:566
安卓導航如何調大mlc音量 發布:2024-09-21 06:59:21 瀏覽:34
洛奇解壓中發生錯誤 發布:2024-09-21 06:53:30 瀏覽:293
解壓球是什麼 發布:2024-09-21 06:53:29 瀏覽:539