首页
社区
课程
招聘
[原创]小软件逆向分析+程序设计
发表于: 2008-11-16 04:40 10114

[原创]小软件逆向分析+程序设计

2008-11-16 04:40
10114

【文章标题】: 小软件爆破+分析+程序设计[精简版]
【文章作者】: eASYRAs
【作者主页】: http://blog.sina.com.cn/77muyulong
【软件名称】: AdslTime.exe
【下载地址】: 自己搜索下载
【加壳方式】: 无
【保护方式】: 机器号验证码 时间限制
【编写语言】: Microsoft Visual C++ 6.0
【软件介绍】: 国产软件 可以管理ADSL上网时间 如果喜欢请购买~
【作者声明】: 学习中的一点点小收获 望高手指点~仅作学习之用 勿于商业用途
--------------------------------------------------------------------------------
【详细过程】
前些日子家里的ADSL又超时了 于是觉得应该写个小东西给家里用 不能总是玩 适时要干些正事~
不过在这个过程中真是受尽了艰辛 深感软件工程之不易 遂撰写此文以记之

文中涉及到一些极其幼稚的思路 望高手一笑而过~

起初就是打算写一个ADSL工具 自以为功夫不错 于是拿出工具动手 发现原来并不简单 刚开始的思路是读取任务栏ADSL
联网对话框里的数据 之后把它显示出来并用文件记录就好了 甚至还想过hook联网与断网的code 达到最省资源 最优的
效果 然而 在实际操作中 种种方法被排斥在门外 无奈何自己过于菜虫…

方法1 HookCode

排除原因 建立ADSL连接是一个在explorer的线程 过程本身是没有进程的 如果想要HOOK 必须要调试explorer 网上倒是
有些资料 不过加载了一下后我就彻底放弃了 这不是常人能玩的~

方法2 远程读取

既然HOOK不了 那做一个外挂总是可以的 所以我打算像制作修改器一样远程读取其它进程(explorer)的数据 之后显示在
自己的程序里 并操作 于是搜索了数据 发现是变址储存 然而explorer又有其特殊性(参见方案1) 所以还是无法通过调
试的手段来得到变址地址 遂不成矣

方法3 Timmer计时法

还想到了一个超级笨的方法 就是用一个Timmer来计时 这样只要有一个开始的信号就好了 Timmer会不停的向文件记录信
息 就算是非正常断网——关机 都不会对其产生影响 虽然有些觉得浪费资源 不过此乃下下之策 总比没有强…=_,=

于是花了些时间"拼凑"出一个超简陋的程序 然而到测试时才发现 忽略了最重要的因素——就是那个开始的信号 相当然
的以为shell那个快捷方式就可以打开连接的 结果过确实不随人愿…至此 方法3正式破产…

之后我苦苦追求 在网上google呀baidu呀 好久好久 一个软件出现在了我眼前 AdslTime 一个商业ADSL计时软件 我把它
装上后试验了一下 比自己的简陋程序不知好了几千倍 不过却又时间限制 于是爆破之……

爆破方法(还要说明一下 这个方法并不是最简单的 不过达到目的就好)

0040795C . 90 nop
0040795D . 90 nop
 
;:::::::::::::::::::::::::::::::
 
0040A350 . 90 nop
0040A351 . 90 nop
00414AD4 AdslTim>/$ 55 push ebp ; (initial cpu selection)
00414AD5 |. 8BEC mov ebp, esp
00414AD7 |. 6A FF push -1
00414AD9 |. 68 B0014500 push 004501B0
00414ADE |. 68 24AE4100 push 0041AE24 ; SE 处理程序安装
00414AE3 |. 64:A1 0000000>mov eax, dword ptr fs:[0]
00414AE9 |. 50 push eax
00414AEA |. 64:8925 00000>mov dword ptr fs:[0], esp
00414AF1 |. 83EC 58 sub esp, 58
00414AF4 |. 53 push ebx
00414AF5 |. 56 push esi
00414AF6 |. 57 push edi
00414AF7 |. 8965 E8 mov dword ptr [ebp-18], esp
00414AFA |. FF15 80934400 call dword ptr [<&KERNEL32.GetVersion>; kernel32.GetVersion
 
Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
 
00000000 17 00 00 00 ....
 
77D18C2E USER32.SetTimer /$ B8 1E120000 mov eax, 121E
77D18C33 |. BA 0003FE7F mov edx, 7FFE0300
77D18C38 |. FF12 call dword ptr [edx]
77D18C3A \. C2 1000 retn 10
00408F00 . 68 AC944000 push ; /杠fd
00408F05 . 68 E8030000 push 3E8 ; |Timeout = 1000. ms
00408F0A . 6A 02 push 2 ; |TimerID = 2
00408F0C . FF76 1C push dword ptr [esi+1C] ; |hWnd
00408F0F . FF15 60944400 call dword ptr [<&USER32.SetTimer>] ; \SetTimer

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

上传的附件:
收藏
免费 8
支持
分享
最新回复 (11)
雪    币: 122
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
很不错的文章,继续努力!
2008-11-16 05:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
高手出手就是不凡啊
2008-11-16 08:38
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
编译成功,但运行时窗口闪一下就不见了,
2008-11-16 08:44
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
5
我喜欢分析的那部分
最好的暴破就是,别人直接双击运行你破解后的文件,就可以直接使用全部功能,而不需要再点注册之类的。。。。。。。

另外,我看见有很多  invoke  语句,为什么不直接用VC++来实现。。。。。。。。。。。
2008-11-16 09:11
0
雪    币: 264
活跃值: (11)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
6
回复1运行后直接最小化到任务栏…
回复2 VC++我也很喜欢用 不过现在在学习asm所以强破自己的…
2008-11-16 12:04
0
雪    币: 251
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
7
好文章,楼主功力非浅
本人觉得学习逆向工程最大的意义在于通过了解软件作者的编程思路而使自身获得提高^-^
2008-11-16 15:06
0
雪    币: 79
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
呵,大牛一出手,就知有没有
受教了
估计ME到你这水准,得是N年后了,不停的羡慕中........
2008-11-16 18:57
0
雪    币: 264
活跃值: (11)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
9
回复1
兄过奖矣 兄之所言极是 愚弟亦以为逆向之道在于学习…
回复2 TO XingMM
杏美眉过奖了…我只是只小菜虫罢了 今之逆向巾帼少之又少 还望指教 以求共同进步…
2008-11-16 21:22
0
雪    币: 79
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我名字不叫什么杏美眉,xingmm这个ID是行苗苗的意思,嘿嘿,小名
2008-11-17 00:37
0
雪    币: 264
活跃值: (11)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
11
回复 行苗苗
记住芳名了 以后多多指教喽~
2008-11-17 01:56
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
顶一下
2008-11-17 03:17
0
游客
登录 | 注册 方可回帖
返回
//