-
-
[原创]小软件逆向分析+程序设计
-
发表于:
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
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!