cooltok_2.zip
27 KB
剩下最后一个主函数....
duangsuse::Echo
存下来的本地偏移量将会起到至关重要的作用(尤其是现在 duangsuse 还只会很模式化的给本地栈帧分配空间的时候)
This media is not supported in your browser
VIEW IN TELEGRAM
上面翻译完的逻辑中 stack protector 什么的因为是机器生成而且 duangsuse 看不懂就没有翻译(
duangsuse::Echo
存下来的本地偏移量将会起到至关重要的作用(尤其是现在 duangsuse 还只会很模式化的给本地栈帧分配空间的时候)
duangsuse 已经能够根据 fbreg 偏移量和一个参数的实际 ebp 偏移计算出其他所有本地变量的 ebp 偏移量,这意味着我可以把所有本地变量访问的汇编偏移量命名,结果将是完工后的汇编既能生成 CoolApk API 会接受的 X-App-Token,又非常好看,容易理解和翻译成其他形式。
感谢带 -g 的 GCC 4.9 🤔
要不然可没有那么容易喽(像我之前一样一个一个猜,最后写出来的算法还是错的)
感谢带 -g 的 GCC 4.9 🤔
要不然可没有那么容易喽(像我之前一样一个一个猜,最后写出来的算法还是错的)
duangsuse::Echo
好 多 🤐
发出了 一个一个算 size 好麻烦 的声音
duangsuse::Echo
有了调试符号的帮助,所有本地变量都可以算出来,类型和名字都有了 🤔
;; LINE FBREG TYPE NAME OFFSET
;; L55 (-432) jclass android_content_Context [ebp-0x1a8]
;; L56 (-428) jmethodID midGetPackageName [ebp-0x1a4]
;; L60 (-424) jstring packageName [ebp-0x1a0]
;; L61 (-420) char *nPackageName [ebp-0x132]
;; L63 (-314) char cp[] [ebp-0xdd]
计算方法是什么呢 🤔先算出当前项的长度:
比如算 L61 的 nPackageName
用 420 减去 314 得出差 106(虽然它好像的确没那么长)
然后用上一个的偏移量减去它的长度
hex 0x1a0 - 106 就是下一项的地址 [ebp-0x132] 喽duangsuse 果然是数学不好,其实公式就是
def n(s) ;hex (s - 8); end ...
duangsuse::Echo
是真的比 Java Bytecode 反汇编还容易理解,看 Java 你至少还得分析本地表和参数栈,看这个你只需要 SSA 思路(基本(当然,用 Java 反编译器的除外
所以说,在 Release 版本里加调试符号的小哥,或者说,在 Release 的 APK 里用 Debug 的 Library 的小哥,辛苦了 👍