• 标 题:谈谈甘肃省某医药检验管理系统6.0的丢狗方法 (5千字)
  • 作 者:木龙
  • 时 间:2003-2-20 20:52:49
  • 链 接:http://bbs.pediy.com

谈谈甘肃省某医药检验管理系统6.0的丢狗方法

在下仅此交流,觅志同者,请高手勿笑!

----------- PART1 ---------------
005E79DD  mov eax, dword ptr [005E9AF0]
005E79E2  cmp word ptr [eax], 27FF        //些处将27FF MOV 到[EAX]
005E79E7  jne 005E79F5                    //如果跳走则不提示,但运行还是提示错误
005E79E9  mov eax, dword ptr [005E9B50]
005E79EE  cmp word ptr [eax], 28FF        //注意此处的28FF
005E79F3  je 005E79FF
005E79F5  mov eax, 005E7B04
005E79FA  call 0045B2D8                  //提示没找到加密锁         
          .
          .
          .
通过寄存器可以得知EAX的值是:64AF0E。好我们看看是什么地方改变了它的值!

----------PART2------------------

00487DD4  push ebx
00487DD5  mov ebx, 0064AF10
00487DDA  mov eax, 0000FFFF
00487DDF  call 00402E08          //读狗,将读出的数据经处理后送入AX
00487DE4  mov word ptr [0064AF0E], ax  //此处写入一值,无狗时不一样
00487DEA  mov eax, 0000000A      //读狗前先写入异常数据
00487DEF  call 00402E08          //读狗,将读出的数据经处理后送入AX
00487DF4  mov word ptr [ebx], ax
00487DF7  mov eax, 0000FFFF      //读狗前先写入异常数据
00487DFC  call 00402E08          //读狗,将读出的数据经处理后送入AX
00487E01  mov word ptr [0064AF12], ax
00487E07  mov eax, 0000FFFF      //读狗前先写入异常数据
00487E0C  call 00402E08          //读狗,将读出的数据经处理后送入AX
00487E11  mov word ptr [0064AF14], ax
00487E17  mov eax, 0000FFFF      //读狗前先写入异常数据
00487E1C  call 00402E08          //读狗,将读出的数据经处理后送入AX
00487E21  mov word ptr [0064AF16], ax
00487E27  mov eax, 0064AF18

以上的读狗的所有语句我们可以不让它读狗,但要将读狗的正常数据返回给程序,怎么知道这个正常数据呢?
根据我们前后推断,应该是“28FF”,那么我们将读狗前写入的异常数据处改为正常的数据,运行程序提示:
"有病毒,程序被非法修改!"怎么办?

------------PART3---------------

0045C667  push dword ptr fs:[eax]
0045C66A  mov dword ptr fs:[eax], esp
0045C66D  mov dword ptr [005EB874], 00000008  //此处传入非8
0045C677  cmp dword ptr [ebp-04], 00000000
0045C67B  je 0045C799                        JE-->JMP
0045C681  mov dword ptr [005EB874], 00000009
0045C68B  mov edx, 00000040
0045C690  mov eax, dword ptr [ebp-04]
0045C693  call 004090CC
0045C698  mov esi, eax
0045C69A  cmp esi, FFFFFFFF
0045C69D  je 0045C799
0045C6A3  mov dword ptr [005EB874], 00000010 //**********
0045C6AD  lea edx, dword ptr [ebp-18]
0045C6B0  mov eax, 005E8CB0
0045C6B5  mov ecx, 00000008
0045C6BA  call 00402A2C
0045C6BF  mov al, byte ptr [005E8CB8]
0045C6C4  mov byte ptr [ebp-05], al
0045C6C7  xor ebx, ebx
0045C6C9  xor eax, eax
0045C6CB  mov dword ptr [ebp-10], eax
0045C6CE  mov dword ptr [ebp-0C], eax
0045C6D1  xor ecx, ecx
0045C6D3  xor edx, edx
0045C6D5  mov eax, esi
0045C6D7  call 00409188
0045C6DC  lea edx, dword ptr [ebp+FFFE6FE3]
0045C6EC  mov ecx, 00019000
0045C6F1  mov eax, esi
0045C6F3  call 00409130
0045C6F8  mov dword ptr [ebp-1C], eax
0045C6FB  mov edi, dword ptr [ebp-1C]
0045C6FE  dec edi
0045C6FF  test edi, edi
0045C701  jl 0045C72B
0045C703  inc edi
0045C704  lea eax, dword ptr [ebp+FFFE6FE3]
0045C70A  mov dl, byte ptr [eax]
0045C70C  xor bl, dl
0045C70E  and edx, 000000FF
0045C714  mov dword ptr [ebp+FFFE6FDC], edx
0045C71A  fild dword ptr [ebp+FFFE6FDC]
0045C720  fadd qword ptr [ebp-10]
0045C723  fstp qword ptr [ebp-10]
0045C726  wait
0045C727  inc eax
0045C728  dec edi
0045C729  jne 0045C70A
0045C72B  cmp dword ptr [ebp-1C], 00019000
0045C732  je 0045C6DC
0045C734  mov edi, 00000009
0045C739  mov eax, 005E8CB0
0045C73E  mov dl, byte ptr [eax]
0045C740  xor bl, dl
0045C742  and edx, 000000FF
0045C748  mov dword ptr [ebp+FFFE6FDC], edx
0045C74E  fild dword ptr [ebp+FFFE6FDC]
0045C754  fsubr qword ptr [ebp-10]
0045C757  fstp qword ptr [ebp-10]
0045C75A  wait
0045C75B  inc eax
0045C75C  dec edi
0045C75D  jne 0045C73E
0045C75F  mov eax, esi
0045C761  call 00409194
0045C766  cmp bl, byte ptr [ebp-05]
0045C769  jne 0045C776
0045C76B  fld qword ptr [ebp-10]
0045C76E  fcomp qword ptr [ebp-18]
0045C771  fstsw ax
0045C773  sahf
0045C774  je 0045C799
0045C776  mov dword ptr [005EB874], 00000012  //**********
0045C780  mov eax, 0045C7C8
0045C785  call 0045B2D8    //"有病毒,程序被非法修改!"
0045C78A  call 00403CFC
0045C78F  mov eax, 000000FA
0045C794  call 00403E28
经过上面的修改,程序运行正常,但后来发现打印时提示:“警告:使用盗版软件将造成不可预料的后果”。有狗时并没有此提示,看样子还没找到关键的地方呀......

-------------PART4----------------

0050004B  lea edx, dword ptr [ebp-28]
0050004E  lea eax, dword ptr [ebp+FFFFFD48]
00500054  call 00404058
00500059  mov edx, dword ptr [ebp+FFFFFD48]
0050005F  mov eax, dword ptr [ebx+00001088]
00500065  call 004318B0
0050006A  jmp 0050008D
0050006C  mov edx, dword ptr [ebx+00001188]
00500072  mov eax, ebx
00500074  call 0044B4B8
00500079  mov eax, dword ptr [005E9A44]
0050007E  cmp byte ptr [eax], 00  //这里要继续跟踪使[EAX]=0就正常了
00500081  je 0050008D
00500083  mov eax, 005001E8
00500088  call 0045B2D8          //警告:使用盗版软件将造成不可预料的后果

到此就算完了,其实当中还有一步就是新建文件时提示没有找到加密锁,经跟踪发现有两处读狗的地方,直接把它NOP就行了,很简单这里就不说了。我刚学这玩意不久,虽有大师指点,但还是没得到精妙之处,不想这几次杀狗还真顺手的。特写出过程与朋友们分享学习成果。还是那句老话,在下真诚希望有志同者教我几招。
特别是白银的那个DM,好坏我们也是半个邻居嘛!到了我这里我请你吃饭哟!
                                              青石(QQ:16561922)