20170831 ?時長3h
ISG賽前練習一:mobile
apkIDE打開妄迁,進入main activity削饵,分析java代碼
發(fā)現(xiàn)comparaTo比較后是0生棍,相等是通過的條件
向上一行捧杉,str為MAGIC_STR的md5呈宇,再向上發(fā)現(xiàn)該值已被賦值
即flag為ISG{ISG2017xxxx}的md5
Reverse : login (暫無)
linux x64 ? ? 工具ida和gdb
gdb簡單命令
(gdb) file ?文件名 ?加載被調試的可執(zhí)行程序文件谷浅,在被調試程序所在目錄下執(zhí)行GDB扒俯,因而文本名不需要帶路徑
(gdb) r ? ? ?run ?簡寫 ?運行
(gdb) c ? ? continue 簡寫 ?繼續(xù)執(zhí)行
(gdb) b? ? 下斷 ?有b 行號
b 函數(shù)名稱
b *函數(shù)名稱 ?符號表示將斷點設置在”由編譯器生成的prolog代碼處“
b *代碼地址
(gdb) d ? ? ? ? ? ? ?刪除指定編號的某個斷點,或刪除所有斷點壳贪,斷點編號從1開始遞增
(gdb) s ? ? ? ? ? ? ? ?“Step Into (單步步入)”
(gdb) n? ? ? ? ? ? ? ? “Step Over (單步步過)”------這兩個命令必須在有源代碼調試信息的情況下才可以使用(GCC編譯時使用“-g”參數(shù))
(gdb)? i ? ? ? ? ? ? ? ? Info的簡寫陵珍,用于顯示各類信息,詳情請查閱“help i”
(gdb) disas ?0xXXXX ? ? ? 反匯編
(gdb) q ? ? ? ? ? ? ? ?退出
匯編風格轉換:(gdb)set disassembly-flavor intel
gdb查看內存:
x/ <n违施、f互纯、u> <addr>是可選的參數(shù),表示一個內存地址
1) n 是一個正整數(shù)磕蒲,表示顯示內存的長度留潦,也就是說從當前地址向后顯示幾個地址的內容
2) f 表示顯示的格式
3) u 表示將多少個字節(jié)作為一個值取出來,如果不指定的話辣往,GDB默認是4個bytes兔院,如果不指定的話,默認是4個bytes站削。當我們指定了字節(jié)長度后坊萝,GDB會從指內存定的內存地址開始,讀寫指定字節(jié)许起,并把其當作一個值取出來十偶。
參數(shù) f 的可選值:
x 按十六進制格式顯示變量。
d 按十進制格式顯示變量园细。
u 按十六進制格式顯示無符號整型惦积。
o 按八進制格式顯示變量。
t 按二進制格式顯示變量猛频。
a 按十六進制格式顯示變量狮崩。
c 按字符格式顯示變量。
f 按浮點數(shù)格式顯示變量鹿寻。
參數(shù) u 可以用下面的字符來代替:
b 表示單字節(jié)
h 表示雙字節(jié)
w 表示四字 節(jié)
g 表示八字節(jié)
舉例:
(gdb) p record
$10 = {12, 76, 48, 62, 94, 17, 32, 37, 52,69}
(gdb) p &record
$11 = (int (*)[10]) 0x8049740
(gdb) x/4uw 0x8049740
0x8049740 <record>:12764862
(gdb) x/6ow 0x8049740
0x8049740 <record>:0140114060076
0x8049750 <record+16>:0136021
Mobile : Ransonware
題目由兩部分組成sample.apk與_target.jpg
使用apkIDE部分java提示error睦柴,這次使用jadx
找到main,發(fā)現(xiàn)對_target.jpg的操作
java AES加密
class Aha()
即mask與main 的"dajidalijinwanchiji~~~~~~" 異或毡熏,并作為AES加密的key
再次異或找到key
解密_target.jpg即可
具體解密腳本還未完成