有时候把汇编的算法还原成C代码是一件令人头大的事,
索性直接从ida的反汇编代码中扒出来用
但是我不习惯用masm写代码,还是喜欢用VC,那怎么办呢?
当然是扒到VC中了.
先把IDA中的反汇编代码复制到一个文本文件里面,然后跑一段replace.pl,把前面的.data:0042E76C等无用代码去掉
Code:
索性直接从ida的反汇编代码中扒出来用
但是我不习惯用masm写代码,还是喜欢用VC,那怎么办呢?
当然是扒到VC中了.
先把IDA中的反汇编代码复制到一个文本文件里面,然后跑一段replace.pl,把前面的.data:0042E76C等无用代码去掉
Code:
|
然后把过滤后的asm代码复制到c文件中
一般我们的做法是放到一个函数中用
__asm
{ }进行包裹
但是vc所生成的函数代码都要进行栈帧和返回处理
也就是产生
push ebp
mov ebp,esp
和
pop ebp
ret 类似的代码,
这个是我们广大中国人民所不愿意看到滴
幸好VC还有__declspec(naked) 参数,放在你指定的函数前,可以让函数"裸奔" :-P 例如:
Code:
|
用Ollydbg看生成的汇编代码,可以看到test函数是"裸"的
Code:
|
好了,剩下的我们要做的工作就是搞清楚被扒代码的函数参数个数和入栈顺序,写个函数声明,然后把反汇编代码填到里面,
PS: 差点忘了说ida中的参数替换怎么处理
Code:
|
写成C的宏,然后放在拔出代码前面即可,最终如下:
Code:
|