首页
社区
课程
招聘
[原创]新手逆向练习 爆破
发表于: 2014-11-7 15:23 7680

[原创]新手逆向练习 爆破

2014-11-7 15:23
7680

背景介绍:  
由于公司准备开发公路工程试验相关项目所以在网上找了一些相关行业软件(参考一下 哈哈),找到了一个叫做新达公路工程资料管理软件,安装成功之后提示未注册,只能进入演示版,所以想试试能不能搞定它

平台版本介绍:
软件名称:新达公路工程资料管理软件
软件版本:(通用2013)V9.86
平台版本:windows XP 32sp3

用到的工具:
Ollydbg

正文:
安装成功后,定位主程序名称 main.exe,并发现krnln.fnr(见图1.1) 这个文件是易语言特有的所以就不查壳了...有点懒。

           图1.1
main.exe载入Ollydbg看到的入口是这样的(见图1.2)

           图 1.2
一看见这个入口就想起了一个壳,哈哈 是什么!没错是UPX壳。完全可以使用ESP定律脱壳。
脱壳过程
1. F8单步走
2. 这时ESP寄存器是红色的,选中->>右键->>数据窗口中跟随
3. 我们看到数据窗口有变化(见图1.3) 选中 ->>右键->>断点->>硬件访问->>Byte
4. F9 运行,我们看到反汇编窗口有变化(见图1.4) ,然后在 00630738处按F4运行到此处,之后F8单步走 走到JMP ,在这里可以看到它跳的够远的 哈哈 0040100.
5. 此时此刻我们来到程序的入口了(见图1.5),(有点小激动 哈哈)
6. 选中第一行 右键->>OllyDump脱壳调试进程,会有一个窗口弹出来(见图1.6),点击获取EIP为新的OEP,之后点击脱壳会让保存,在此我们保存为1111.exe(..马上光棍节了..2333)到此我们脱壳处理结束;

           图 1.3

           图 1.4

           图 1.5

           图 1.6

分析过程:
运行程序,弹出个对话框,软件未授权,软件将以试用版运行!,看到这个就感觉非常讨厌!我们来干掉它;回到OD主界面 按下F12,然后点击调用堆栈Alt+K,我们来到调用堆栈界面(见图1.7),我们选择MessageBoxA 右键->>显示调用,来到反汇编画面(见图1.8),我们在这行下断F2, 然后F9运行 找到弹出的对话框点确定,
这时我们需要将程序重新载入Ctrl+F2,F9跑起来,哈哈在图1.8处断下来了,F8单步走,出来之后点确定Ctrl+F9 2次 我们来到触发处(见图1.9),我们向上看 找到关键的跳转(能跳过这段代码的判断),
005BEA08   /0F84 99000000   je      005BEAA7               ; 关键跳
我们把它改成 jnz 005BEAA7 就可以跳过这段提示代码了。

           图 1.7

           图 1.8

           图 1.9

修改之后我们再次F9,你会发现 提示框没有了,但是这不意味着完全破解了,我们登陆 使用默认的就可以 直接点登陆,这样会弹出工程选择的对话框
尝试着点新建工程会弹出一个 提示窗口 大概意思就是(..你没注册 不能新建工程), 好 我们继续把这个干掉(见图 2.0).
我们要找到新建工程的函数,我们点击菜单->>查看->>可执行模块 双击krnln.fnr 进入代码 然后切换到OD窗口 按Ctrl + B,这时会弹出窗口 在HEX输入框内输入 易语言按钮事件的特征码 FF 55 FC 5F 5E 89 5D F4 然后点击确定我们看到(2.1),F2 下断 再次点击新建工程 断下来之后 F7步入,这样我们就来到按钮函数内了然后再回去把图2.1处的断点去掉


关键函数如下:
005BF155    E8 89000000     call    005BF1E3
005BF15A    833D BC02C100 0>cmp     dword ptr [0xC102BC], 0x0
005BF161    0F85 38000000   jnz     005BF19F
...................
005BF192    E8 1A580600     call    006249B1            弹出 提示窗口
005BF197    83C4 28         add     esp, 0x28
005BF19A    E9 40000000     jmp     005BF1DF
005BF19F    833D 0403C100 0>cmp     dword ptr [0xC10304], 0x1
005BF1A6    0F85 33000000   jnz     005BF1DF
....................
005BF1E2    C3              retn
在这里我们看到两个比较 0xC102BC 0xC10304两个常量 上面有个Call 我们进入这个Call看看 找到两个常量的赋值处, 上方函数要求 0xC102BC != 0  0xC10304 != 1才可以所以将   je   005BF781 改成 jnz 005BF781 就可以实现赋值了.
005BF75C    3915 EC02C100   cmp     dword ptr [0xC102EC], edx
005BF762    0F84 19000000   je      005BF781          改成jnz 将两个常量赋值程0x1 就可以了           
005BF768    C705 0403C100 0>mov     dword ptr [0xC10304], 0x0
005BF772    C705 BC02C100 0>mov     dword ptr [0xC102BC], 0x0
005BF77C    E9 14000000     jmp     005BF795
005BF781    C705 0403C100 0>mov     dword ptr [0xC10304], 0x1        ;
005BF78B    C705 BC02C100 0>mov     dword ptr [0xC102BC], 0x1        ;

            图 2.0

            图 2.1
然后我们再次运行 看看 还有提示么
弹出新建工程对话框了 哈哈 随便输入个工程名,就叫金胖胖
哈哈成功了 我们在试试一个案例里新建多个文档 是否可以
成功了!

总结:
    这个软件有点简单,没有什么难的,破文写的有点乱~ 第一次写大家见谅哈

我是一名在职程序员,非常喜欢底层的东西...最近在学习分析算法写注册机和驱动编程 希望大家多多指点,

                                                   2014-11-07
                                                   看雪IDCarlton
                                                   常用名:金胖胖

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 16468
活跃值: (2493)
能力值: ( LV9,RANK:147 )
在线值:
发帖
回帖
粉丝
2
我只是进来看下E语言有多流弊的。
2014-11-7 15:30
0
雪    币: 84
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢楼主的教程。辛苦了!
2014-11-7 15:56
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
没附件...........我也想玩玩
2014-11-8 16:53
0
雪    币: 55
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢楼主的分享
2015-1-19 08:29
0
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感谢大哥分享!!!!!
2016-4-15 17:04
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢分享
2016-4-25 10:42
0
游客
登录 | 注册 方可回帖
返回
//