duangsuse::Echo
717 subscribers
4.26K photos
130 videos
583 files
6.48K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
duangsuse::Echo
所以这个『64』位闹剧终于结束了 😵... 真的是相当无聊啊
This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse::Echo
所以这个『64』位闹剧终于结束了 😵... 真的是相当无聊啊
注:之前之所以我误以为有啥双字问题写出的程序还能用是因为那些都是本地变量偏移,增长一点也没什么,参数偏移只有一个而且歪打正着
duangsuse::Echo
这显然是错误的,明明只分配了四个字的空间,却全用的是 dword,这根本不可能可以正常运行,存储位置全是冲突的!反汇编只是为了能让你看得懂机器代码而不可能简单地再重新汇编上吗?
至于这个的问题,就是取本地变量 j 的时候偏移量不对(0xe 是十进制 14,然而 j 变量分配在 0x14 (21) 号单元里,结果是取了一半的 local j,当然有问题),开始我反汇编的时候反汇编器给的全是十六进制数,然后复制过来没有因为无效数位错误的我都没有修改,我以为 NASM 默认全是 16 进制数,可是其实默认全是十进制... 看来我得重新再来了 emmmm
我比较不擅长数学... 不得不承认,我不知道为什么它说 dword ptr 但其实只移动了一个字(4 bytes)的数据,但是我希望以后都不要再出这种岔子了,现在我使用这种宏定义的方式掩盖了栈帧本地变量的复杂性,目前 edb 测试发现这种方式并没有什么不妥,栈帧的大小正好适当。
cooltok_1.zip
26.9 KB
用这种方式写出来的汇编还蛮易读的,方便分析少操心... 也好
蜜汁分配
cooltok_2.zip
27 KB
剩下最后一个主函数....
存下来的本地偏移量将会起到至关重要的作用(尤其是现在 duangsuse 还只会很模式化的给本地栈帧分配空间的时候)
上面翻译完的逻辑中 stack protector 什么的因为是机器生成而且 duangsuse 看不懂就没有翻译(
duangsuse::Echo
存下来的本地偏移量将会起到至关重要的作用(尤其是现在 duangsuse 还只会很模式化的给本地栈帧分配空间的时候)
duangsuse 已经能够根据 fbreg 偏移量和一个参数的实际 ebp 偏移计算出其他所有本地变量的 ebp 偏移量,这意味着我可以把所有本地变量访问的汇编偏移量命名,结果将是完工后的汇编既能生成 CoolApk API 会接受的 X-App-Token,又非常好看,容易理解和翻译成其他形式。

感谢带 -g 的 GCC 4.9 🤔
要不然可没有那么容易喽(像我之前一样一个一个猜,最后写出来的算法还是错的)
有了 RE Group 就方便多了...
好 多 🤐
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 ...
😶