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 一通莫名其妙的 local variable extract & reallocation 居然工作正常了,可喜可贺(又被当成编译器用的 duangsuse....)
🤔 觉得调试符号里会保存关于本地变量偏移的信息,正在迫真查找...
duangsuse::Echo
duangsuse 一通莫名其妙的 local variable extract & reallocation 居然工作正常了,可喜可贺(又被当成编译器用的 duangsuse....)
说实在话,2014 年的 GCC 4.x 做的优化是有,但是它生成的代码非常模式化(比如函数调用基本就是个模板)

所以说反汇编再弄成汇编项目,虽然逆向工程都需要花时间但容易很多。

可是现在即使是基于 SSA 的 native code decompiler RetDec 反编译的结果参考价值都很低,几乎可以说等于没有,还不如 Radare 2 抽象执行自动分析呢
duangsuse::Echo
说实在话,2014 年的 GCC 4.x 做的优化是有,但是它生成的代码非常模式化(比如函数调用基本就是个模板) 所以说反汇编再弄成汇编项目,虽然逆向工程都需要花时间但容易很多。 可是现在即使是基于 SSA 的 native code decompiler RetDec 反编译的结果参考价值都很低,几乎可以说等于没有,还不如 Radare 2 抽象执行自动分析呢
RetDec 目前对一些简单编译优化的反编译结果参考价值低,从一个侧面劝谏大家要学习去看到汇编后面的东西,不能只会编译一个反编译器然后妄想像 Java 逆向一样,只需要解决混淆的问题就完了。


『手工』反编译需要有基本的编译原理基础,使用 SSA 的思路把树『收』起来也是个不错的想法
如果使用 NASM 的宏功能把函数的本地偏移量抽提出来,就会好看得多了
fbreg 就是 frame base register 🤔 那... 酷安大佬做的可真是太棒了,我都不用去猜测本地变量在哪了,调试符号会告诉我....
🤔 原来有些东西比如子程序参数还得是 32 位的,有些必须是 64 位的.... 奇葩的 types..
其实最后还是我搞错了,两个十六进制数位可以表示一个字节(0-256,0x00-0xff),四个字节是一个字,所以 edb 里的寄存器实际上的确是一个字,不是我想的那样,x86_64 的 r** 也都是 64 位,不是 128 位

在之前我看来好像 ab cd 这四个应该是『一个字』(匹配 .... 这四个单单的数位模式),其实 ab 是一个字节、 cd 又是一个字节,加起来一个半字,远远没有一个字那么长
所以这个『64』位闹剧终于结束了 😵... 真的是相当无聊啊
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 还只会很模式化的给本地栈帧分配空间的时候)