能力值:
( LV12,RANK:440 )
|
-
-
2 楼
支持楼主分享啊!
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
下载分析玩玩
|
能力值:
( LV7,RANK:100 )
|
-
-
4 楼
分析得很详细,下载来学习下,呵呵
|
能力值:
( LV15,RANK:440 )
|
-
-
5 楼
沉了。。。。。。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
建议以后用mht。省得装office
|
能力值:
( LV15,RANK:520 )
|
-
-
7 楼
弟弟ding你.坤哥!
|
能力值:
( LV15,RANK:520 )
|
-
-
8 楼
这个分析的很好。应该精华的。
|
能力值:
( LV15,RANK:520 )
|
-
-
9 楼
继续顶。直到拿了精华为止!
|
能力值:
( LV12,RANK:440 )
|
-
-
10 楼
韬哥这么晚了还不休息啊
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
IDA5.5打不开。。。。
|
能力值:
( LV12,RANK:440 )
|
-
-
12 楼
试试6.1版本
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
分析的很详细 ,学习了
|
能力值:
( LV4,RANK:40 )
|
-
-
14 楼
楼主好运气,找到了MessageBox,我跟着程序跑啊跑,就跑丢了,求大牛的完美破文....
-------------------------------------------------------------------------------------------------
1.按钮事件的消息传递:
内核-> AfxWndProc(sub_00408F03) -> AfxCallWndProc(sub_00408E16) -> CWnd::WindowProc(sub_00406D85) ->
CWnd::OnWndMsg(sub_0040A3CF ) -> CWnd::OnCommand(sub_00409934) -> CDialog::OnCmdMsg(sub_004051FA) ->
CCmdTarget::OnCmdMsg(sub_00403615) -> _AfxDispatchCmdMsg(sub_004034dd) -> sub_004023b0()
sub_004023b0()为第一次加密,基本是一些内存复制操作
sub_004023b0()
{
GetWindowTextA(hwnd_edit,0012f7b8,10);
GetWindowTextA(hWnd_edit,0012f7c4,10);
sub_401900(0012fe6c,"%s",0012feb8);
sub_401900(0012fec8,"%s",0012f7b8);
sub_401900(0012fecc,"%s",0012f7b8);
sub_401900(0012fed0,"%s",0012f7c4);
sub_401900(0012fe70,"%s",0012f7c4);
sub_401900(0012fed4,"%s",0012f7c4);
PostMessage(hwnd,0x466,0,0);
}
2.466事件的消息传递:
内核-> AfxWndProc(sub_00408F03) -> AfxCallWndProc(sub_00408E16) -> CWnd::WindowProc(sub_00406D85) ->
CWnd::OnWndMsg(sub_0040A3CF ) -> sub_00402250
sub_00402250疑似第二次加密,但是看不出意图,未调用messagebox,也未指出下一步方向,只是有throw exception的操作。
sub_00402250()
{
new();
new();
....
free();
free();
return;
throw_exception(0x8000057);
throw_exception(0x8000057);
return;
}
3.跟踪了下exception,有int 3反调试,NOP掉,程序出错。
loc_004013d0(id)
{
if(id == 0x8007000E)
{
_CxxThrowException(x,x);
}
AfxThrowOleException(id)
}
4. 无路可走......
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
MARK!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
顶一下,lz分析的很详细,我等菜鸟收益了,感谢!
|
能力值:
( LV3,RANK:20 )
|
-
-
17 楼
先让程序跑起来,指不定哪个人来恶搞一下,放个硬件低格的病毒,哈哈。
|
能力值:
( LV15,RANK:440 )
|
-
-
18 楼
胆儿小的用虚拟机,,胆儿中的用沙箱,胆儿大的真机跑,你是哪类?我是属于那种最胆儿小的啊。
|
能力值:
( LV3,RANK:20 )
|
-
-
19 楼
我是直接不跑的。
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
下载分析,学习学习,谢谢。
|
能力值:
( LV2,RANK:15 )
|
-
-
21 楼
看了很长时间,终于看完了,这里有一些疑问。
.text:00401C63 cmp eax, 3E8h
.text:00401C68 jbe short loc_401C74
.text:00401C6A mov Msg, 466h
原文中说“间隔如果小于1秒,则消息码被置为466”,是否有误。应该为“间隔如果大于1秒,则消息码被置为466”吧?
和作者一样,没有跟踪到465h消息码的处理过程。不过输入密码点“确定”之后,在主窗口处理过程函数中断下,正常传入的消息码为464h,此时可以手动改为465h,后续将会进入465h消息码对应的消息处理函数00401C30 (TickCountCheck)中。
堆栈 ss:[0012FC98]=00000465
第一次调用TickCountCheck时,tickcount初始值为1,所以调用GetTickCount更新tickcount的值。然后F9运行,即使输入的为正确密码,此时也没有任何提示。再次点击“确定”,重复之前的步骤。如果不修改程序传入的消息码464h,则仍能够弹出提示框,如果仍然修改为465h,则继续进入到TickCountCheck中。之前对465h的处理已经更新过tickcount,此时程序计算两次处理的时间差,因为是调试过程,所以必然大于1秒,是否程序此时认为被调试然后把消息码更改为466h?此后,内存地址0040DFA4的值被更改为466。F9继续运行,输入正确的密码也不会再弹出提示框。
最后还有一个疑问,IDA中遇到形如“unknown_libname_261”的函数名,有些可能是一些库函数,能否让IDA自动识别出来?
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
很详细,顶一个
|
|
|