逆向工程核心原理学习笔记(二十四):abex'crackme #2 初探
2017-05-13 10:44
316 查看
下载地址:http://t.cn/RaoP3si
首先OD载入程序:
然后停在了程序的入口点,我们F7跟入下面的call.
发现先调用了VB引擎的主函数,然后push 401e14把RT_MainStruct结构体地址压入栈,然后转过头来调用401232地址处的代码,跳转到了JMP DWORD PTR DS:[0x4010A0],这里依然是VB引擎的主函数
上面三行代码都是VB启动的全部代码
然后我们需要说一个间接调用的过程:
在调用VB引擎主函数的时候不是直接去访问4010A0地址,而是先PUSH,然后CALL 401032,再跳转到4010A0,这是VC++,VB等编译器常用的间接调用法。
再看一下[b]RT_MainStruct结构体:[/b]
也就是这里,它push的地方
[b][b]RT_MainStruct结构体[/b]的成员使其他结构体的地址,也就是说,VB引擎通过参数传递过来的[b]RT_MainStruct结构体[/b]获取程序运行所需的所有信息。[/b]
再来看看ThunRTMain函数:
没有啥好看的,这里使VB调用的MSVBVM60.DLL模块的地址区域。
首先OD载入程序:
然后停在了程序的入口点,我们F7跟入下面的call.
发现先调用了VB引擎的主函数,然后push 401e14把RT_MainStruct结构体地址压入栈,然后转过头来调用401232地址处的代码,跳转到了JMP DWORD PTR DS:[0x4010A0],这里依然是VB引擎的主函数
上面三行代码都是VB启动的全部代码
然后我们需要说一个间接调用的过程:
在调用VB引擎主函数的时候不是直接去访问4010A0地址,而是先PUSH,然后CALL 401032,再跳转到4010A0,这是VC++,VB等编译器常用的间接调用法。
再看一下[b]RT_MainStruct结构体:[/b]
也就是这里,它push的地方
[b][b]RT_MainStruct结构体[/b]的成员使其他结构体的地址,也就是说,VB引擎通过参数传递过来的[b]RT_MainStruct结构体[/b]获取程序运行所需的所有信息。[/b]
再来看看ThunRTMain函数:
没有啥好看的,这里使VB调用的MSVBVM60.DLL模块的地址区域。
相关文章推荐
- 逆向工程核心原理学习笔记(二十七):abex'crackme #2 破解算法
- 逆向工程核心原理学习笔记(二十六):abex'crackme #2 name的存取
- 逆向工程核心原理学习笔记(二十五):abex'crackme #2初步破解
- 逆向工程核心原理学习笔记(十二):分析abex' crackme #1
- 逆向工程核心原理学习笔记(十三):分析abex' crackme #1 的延伸:将参数压入栈
- 逆向工程核心原理学习笔记(十三):分析abex' crackme #1 的延伸:将参数压入栈
- 逆向工程核心原理学习笔记(十二):分析abex' crackme #1
- 逆向工程核心原理学习笔记(三):检索API方法
- 逆向工程核心原理学习笔记(一):寻找程序的主函数(Main)
- 逆向工程核心原理学习笔记(二十):栈帧7:删除函数add()的栈帧&函数返回
- 逆向工程核心原理学习笔记(十一):栈
- 逆向工程核心原理学习笔记(二十三):栈帧10:设置返回值,删除栈帧&main()函数终止
- 逆向工程核心原理学习笔记(七):总结
- 逆向工程核心原理学习笔记(三):检索API方法
- 逆向工程核心原理学习笔记(一):寻找程序的主函数(Main)
- 逆向工程核心原理学习笔记2-基址重定位基本原理
- 逆向工程核心原理学习笔记(六):实战开辟新内存区域写入缓冲区跳转修改字符串
- 逆向工程核心原理学习笔记(十五):栈帧2:设置局部变量
- 逆向工程核心原理学习笔记(四):检索API方法2-设置断点
- 逆向工程核心原理学习笔记(十九):栈帧6:ADD运算