VB程序脱壳方法步骤(UPX->www.upx.sourceforge.net*)
本帖最后由 reddiamond 于 2014-12-10 17:27 编辑一、软件及加壳情况:
1、软件是用VB6.0编写的,是俄罗斯人编写的福特汽车配置修改程序--ELMConfig,软件的版本为V0.2.14。
2、加壳情况:用PEid查壳是UPX->www.upx.sourceforge.net*,但有的版本报VMPoctect 2.46,有的报UPolyX v0.5*,特别是在脱壳不完全的情况下,程序能运行但再查壳时是“什么都没有发现*”。
主要是显示UPolyX v0.5*,还有一种查出显示是VMPoctect 2.46的。
分析:加壳的情况不能确定,但软件是Vb的可以确定,因此根据VB的特征寻求脱壳的方向。
二、脱壳工具的准备:
OD、LoadPE、ImportREC
三、步骤
1、确定OEP的地址
载入OD
在API函数LoadLibraryA下断
运行或F9
看加载动态链接库的情况,第一个是MSVB60.Dll
第二个是Kennal32.dll或者是USER32.dll
这时可以下ThunRTMain断点,bp ThunRTMain
断下后看堆栈,往上翻看看,会看到你喜欢的jmp ThunRTMain
记下堆栈中的数据,
然后跟随到汇编窗口,看到了OEP,但代码被偷了,注意下图
2、跟踪到OEP
如果你想直接F4过来,可能会飞。
重载入后,用LoadlibraryA下断到Kernal32.dll或User32.dll 后,不再bp ThunRTMain,Cltr+G到00407B1c.然后F4.
到这里了,OEP前一行,如果这是里Dump是不行的,改下这行让OD跳到00407b22
这样就到了OEP
改下OEP的代码,按图中改,然后Dump就可以了。
三、修复RVA
脱壳后的程序仍然不能汉化。
四、总结
1、VB编写的软件用ThunRTMain这个函数来找OEP比较容易。
2、这个软件目前是什么程序加壳的,我仍然不能确定,希望有人能帮我确定下。
软件下载地址:(待上传)百度云盘下载
(待续写)
Ctrui 发表于 2014-12-10 15:47
一看到VB就头疼,膜拜会VB的大神
其实我其他的都不会,找OEP都不熟的,我无数次跟我这个点,因为在系统空间里,我就没有当一回事。
733935A4 >55 push ebp
733935A5 8BEC mov ebp,esp
733935A7 6A FF push -0x1
733935A9 68 D0973A73 push MSVBVM60.733A97D0
733935AE 68 FDBA4773 push MSVBVM60.7347BAFD
733935B3 64:A1 00000000mov eax,dword ptr fs:
733935B9 50 push eax
733935BA 64:8925 0000000>mov dword ptr fs:,esp
一看不是VB的OEP,就过了,殊不知在系统的空间会是另一个样子,是VC++的OEP 今天又脱了一个版,发现在修改后要把程序运行到Push 00424828这一行,也就是将0407b1c改为jmp 00407b22,然后单步下,再将0407b1c改回jmp dword ptr ds:,然后Dump,否则脱壳不干净。
或者记住地址,单步到一个空代码处,重新构造一个入口:
push 00424828;
call 00407b1c;
当前行放在push 00424828 大婶呀,,,刚才搞脱了一半 就高不下去了,结果放弃VB
你这个rva是怎么找到的? 一看到VB就头疼,膜拜会VB的大神{:301_1003:} 好牛逼啊!又涨姿势了 viks 发表于 2014-12-10 15:18
大婶呀,,,刚才搞脱了一半 就高不下去了,结果放弃VB
小侄,要不你发给我看看,玩笑! 520Kelly 发表于 2014-12-10 15:30
你这个rva是怎么找到的?
我正在查这方面的资料。
确定RVA的方法:
1、有个网友说一般是10;
2、网上有个朋友帮我脱过一个版本,能正常汉化,RVA是10;
3、我对ELMConfig进行了系列的汉化,以前的版本都是10.
所以蒙着试了下。 看完还是一头雾水,还得多看几次
页:
[1]
2