近来软件都跟我作对
kflnig
刚刚搞定了。超星阅览器的更新窗口。这儿又来一个RocketDock的nag窗口。我打开它,它就如1了。
图1
决定再搞了它,其实我绝少搞这种东西。这算是第二个吧!决定好好玩玩这个,用来骗一篇精华帖。
看到图1有什么感想。我怎么看都怎么像只是一个MessageBoxA。可是只找到这个:
名称位于 RocketDo, 条目 236
地址=0043C334
区段=.rdata
类型=输入 (已知)
名称=USER32.MessageBoxW
一样的了,看来Unicode是大势所趋了。好了就断它吧!
00422BC2 |>TEST BL,BL
00422BC4 |.MOV EDI,DWORD PTR DS:[<&USER32.MessageBoxW>]
00422BCA | JE SHORT RocketDo.00422BE4
00422BCC |.PUSH 41 ; /Style = MB_OKCANCEL|MB_ICONASTERISK|MB_APPLMODAL
00422BCE |.PUSH RocketDo.0043E6FC ; |Title = "Punk! Software Beta"
00422BD3 |.PUSH RocketDo.0043E5D8; |Text = "This beta software is provided for testing and localization..Please submit bugs/languages to the forums (punksoftware.com).Use at your own risk!"
00422BD8 |.PUSH EBP ; |hOwner
00422BD9 |.CALL EDI ; \MessageBoxW
00422BDB |.CMP EAX,1
00422BDE |. JNZ RocketDo.00422F1F
00422BE4 |> MOV DWORD PTR SS:[ESP+28],ESI
F9一下就到了。简单,快捷,爽!看后面OD的自动注释。
干这种事情啊!最最重要的还是修正堆栈。我们先要确定这两条语句是怎么回事
00422BDB |.CMP EAX,1
00422BDE |. JNZ RocketDo.00422F1F
我们必须了解点击“确定”会使EAX=1呢,还是点“取消”。所以我们在00422BDE下一个断点。然后运行软件,点确定,发现点击确定是会使EAX=1。
好了。00422BCC――00422BDE这一片代码都不要了。我呢,为了简单点,也为了不想去操纵堆栈,就直接一点了。MessageBoxW在内部看样子就已经解决了最头痛的堆栈问题,所以我们不要把MessageBoxW的参数传到堆栈里面去,而00422BCC刚好是想参数开始。
直接把00422BCC的代码改成jmp 00422BE4就可以了。
到这里我本来想结束了的,后来决定再补一点。再给大家看个nag框。
图2
哇!难道这个软件是专门为我开发的。感动啊!当然这种东西是骗不过老鸟的。
提示一点,我只是用了OD的一个功能,CTRL+E简单吧!二进制编辑。多简单啊!有不懂者请看我的文章《一些给小小鸟看的东西》。
近来干这种事情上瘾了。不练手,手痒!
《系统美化专家》这个可恶的东西。想起它就来气。没有找到真的注册码,费了挺大的劲找到一组伪的。就是说会输出成功注册而事实却没有注册的东西。
图3
这个东西很好去除,和上面的一样。
/*467F58*/ PUSH EBX
/*467F59*/ PUSH EDI
/*467F5A*/ PUSH ESI
/*467F5B*/ MOV EAX,DWORD PTR SS:[EBP-4]
/*467F5E*/ MOV EAX,DWORD PTR DS:[EAX+30]
/*467F61*/ PUSH EAX
/*467F62*/ CALL <JMP.&USER32.MessageBoxA>
/*467F67*/ MOV DWORD PTR SS:[EBP-8],EAX
本来是这样,我们改成,
/*467F58*/ JMP SHORT unpacked.00467F67
这中间的保留,但是绝对不会执行了的。
/*467F67*/ MOV DWORD PTR SS:[EBP-8],EAX
但是你点确定后还会硬叫出浏览器,去它们的网站,霸王条款,待我破了它。这种方式以前没有见到过。
下面的叫出浏览器的代码肯定实在上述代码之后。我们慢慢F8跟,经过一些地方就发现,采用的是这个ShellExecuteA。它我们还是老办法。本来是这样:
/*5E6943*/ PUSH 1
/*5E6945*/ PUSH 0
/*5E6947*/ PUSH 0
/*5E6949*/ PUSH unpacked.005E6A48
/*5E694E*/ PUSH 0
/*5E6950*/ MOV EAX,EBX
/*5E6952*/ CALL unpacked.0044D490
/*5E6957*/ PUSH EAX
/*5E6958*/ CALL <JMP.&SHELL32.ShellExecuteA>
/*5E695D*/ PUSH 1
/*5E695F*/ PUSH 0
/*5E6961*/ PUSH 0
/*5E6963*/ PUSH unpacked.005E6A48
/*5E6968*/ PUSH 0
/*5E696A*/ MOV EAX,EBX
/*5E696C*/ CALL unpacked.0044D490
/*5E6971*/ PUSH EAX
/*5E6972*/ CALL <JMP.&SHELL32.ShellExecuteA>
/*5E6977*/ POP EBX
我们改成
/*5E6943*/ JMP SHORT unpacked.005E6977
中间的,你爱怎么变就怎么变。反正绝对不会执行到。
/*5E6977*/ POP EBX
可惜的是这些东西连校验都没有,否则文章还要再精彩一点。
OK了,打完收工。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!