《逆向工程核心原理》学习笔记(五)

《逆向工程核心原理》学习笔记(五)

《逆向工程核心原理》学习笔记(五)

记录下第八章对于vb程序的逆向调试分析。

 

《逆向工程核心原理》学习笔记(五)_第1张图片

 

od载入,在EP代码中首先做的是调用VB引擎的主函数(ThunRTMain())

《逆向工程核心原理》学习笔记(五)_第2张图片

 

 EP地址为00401238,401238地址处的PUSH 401E14指令是用来把RT——MainStruct结构体的地址(401E14)压栈,40123D地址处的call指令是调用401232处的jmp指令,该jmp指令会跳转到VB引擎的主函数ThunRTMain(),前面401E14的值作为ThunRTMain()的参数。

《逆向工程核心原理》学习笔记(五)_第3张图片

 

 

这里40123D地址的call指令是调用ThunRTMain()函数,但是不是直接转到MSVBVM60.DLL的ThunRTMain()函数,而是通过中间401232地址的jmp指令跳转

这就是VC++、VB编译器中常用的间接调用法(Indirect Call)

 

 

分析

查看字符串 找到输入错误时显示的字符串

《逆向工程核心原理》学习笔记(五)_第4张图片

 

 《逆向工程核心原理》学习笔记(五)_第5张图片

 

 

 

 往上查找,果然只要到包含条件转移语句的代码(判断用户输入的序列号与字符串是否相同)

《逆向工程核心原理》学习笔记(五)_第6张图片

 

 

403329地址的__vbaVarTstEq()函数,比较test指令返回值(AX)后,由403332地址的条件转移指令(JE指令)决定执行的代码为"真"还是"假"

《逆向工程核心原理》学习笔记(五)_第7张图片

 

 

 

 在__vbaVarTstEq()比较函数上面可以看到两条push指令,为比较函数的参数

 《逆向工程核心原理》学习笔记(五)_第8张图片

 

 

00403321   .  8D55 BC       lea edx,dword ptr ss:[ebp-0x44]
00403324   .  8D45 CC       lea eax,dword ptr ss:[ebp-0x34]

 

 这里SS是栈段,EBP是基址指针寄存器。SS:[EBP-44]指的是栈内地址,它恰好又是函数中声明的局部对象的地址(局部对象存储在栈区)。

 

 现在我们来看看生成serial的算法

 

往上看 找到了明显函数形成栈帧的地方,我们可以在这里下个断点(00402ED0)

《逆向工程核心原理》学习笔记(五)_第9张图片

 

 

 往下分析 可看到在地址00402F8E处函数把局部对象SS:[EBP-88]地址传递(push)给了函数的参数。

 

 《逆向工程核心原理》学习笔记(五)_第10张图片

 

 可以看到name字符串以字符串对象的形式存储到了[EBP-88]地址

 

继续往下调试分析,我们可以看到一系列循环语句。

《逆向工程核心原理》学习笔记(五)_第11张图片

 

posted @ 2019-03-28 10:48 卿先生 阅读( ...) 评论( ...) 编辑 收藏

你可能感兴趣的:(《逆向工程核心原理》学习笔记(五))