- UID
- 405
注册时间2005-3-25
阅读权限30
最后登录1970-1-1
龙战于野
该用户从未签到
|
楼主 |
发表于 2005-5-14 18:25:56
|
显示全部楼层
会跳转,因此,观察跳转处:
00419D01 mov eax,dword ptr ss:[ebp+C] ;获取传来的消息
00419D04 mov dword ptr ss:[ebp-78],eax
00419D07 cmp dword ptr ss:[ebp-78],111
00419D0E ja short .00419D7E
00419D10 cmp dword ptr ss:[ebp-78],111
00419D17 je .0041A4DB
00419D1D cmp dword ptr ss:[ebp-78],4E
00419D21 ja short .00419D52
00419D23 cmp dword ptr ss:[ebp-78],4E
00419D27 je .0041A2A4
00419D2D mov ecx,dword ptr ss:[ebp-78]
00419D30 sub ecx,1 ; wm_paint = 0F h
00419D33 mov dword ptr ss:[ebp-78],ecx
00419D36 cmp dword ptr ss:[ebp-78],0E
00419D3A ja .00422E98
00419D40 mov eax,dword ptr ss:[ebp-78] ; 如果wm_paint,此处为 0E h
00419D43 xor edx,edx
00419D45 mov dl,byte ptr ds:[eax+422ECD]
00419D4B jmp dword ptr ds:[edx*4+422EB9]
由于我们关心WM_PAINT消息,在windows.h查一下该消息值为:0F H。
上面的00419D01 mov eax,dword ptr ss:[ebp+C] 用来获取传来的消息。我们假定该处获得WM_PAINT消息,也就是0FH。观察一下代码的流向。这里很好观察,但是为了避免出错,你可以把传来的参数硬性改成0FH。到了
00419D4B jmp dword ptr ds:[edx*4+422EB9]
再往下:
0041EFEA mov eax,dword ptr ds:[43CFD4]
0041EFEF cmp eax,dword ptr ds:[43CFDC]
0041EFF5 jge short .0041F00B
然后不用细说,F8执行几步就到了处理数据的地方,如果再往下跟踪,就是GDI画图函数,用来将计算出来的数据显示在坐标系里面。
下面就正式登堂入室,可以分析软件如何计算数据,然后将这些数据以图形形式打印在界面上。
分析这些入口点,一般来说需要一些技巧,但是更需要扎实的功底,我一般不太乐意看一些花哨的插件或者高级的用法,当然并不是说那样东西不好,只不过是说采用一些基础的知识,其实可以达到那些目的。基础的知识才是我们需要加强的。
再往下就可以分析软件的算法了。
很多程序的核心算法,都是枯燥的数据运算,如果要搞清楚他们,关键有3点:
1、 找到他们所在的地方;
这就是本文所讲的东西。
2、 可以理解整个运算过程;
这是枯燥的跟踪调试,也是最消耗时间很反映个人基础的过程;
3、 理解算法的逻辑。
看起来这一点没必要,我以前也这么认为。但是后来发现,有些东西,即使理解运算过程,也很难理解运算逻辑,也就是不晓得为什么要那么运算。要做到这一点,就靠触类旁通的天赋+平时的积累。
因此,诚如一位大侠所说:“终极逆向工程,在于理解对方的整个运算流程和逻辑思维。”吾等小辈,唯有孜孜不倦,才有可能达到终极境界。 |
|