绝望了,跟不出这个RSA的过程,怀疑是RSA但是又有点象DSA
已经跟了1周了, 找到他的关键CALL了,但是用工具算的结果又不一样,而直接模拟里面的CALL又相当的多
他CLIENT里有1张固定的表长度是256,第一次和服务器通讯,服务器也返回另外一张表也是256,然后开始CLIENT的运算,第一次是在本地通过GetCurrentThreadId以及其他API随即产生一个值,用SHA1得到一个HASH值
这个值我验证了,是可以伪造的。下来的过程就是,将CLIENT这个固定的256表,SHA1得到的表,还有一个常数32,参数400,一起送到核心处理的地方,之后得到一个256的表发给SERVER,接下来,在用固定表,发给服务器表,SHA1表,常数400,通过同样的核心处理得到CLIENT自己用的表,长度256,然后取表头8为作为加密的用的KEY,
数据加解密过程我已经都搞定,就是这个加密解密用的KEY生成过程非常复杂。郁闷
以下是部分核心过程
00640A40 /$ 55 push ebp
00640A41 |. 8BEC mov ebp,esp
00640A43 |. 81EC B0000000 sub esp,0B0
00640A49 |. 53 push ebx
00640A4A |. 56 push esi
00640A4B |. 57 push edi
00640A4C |. 8DBD 50FFFFFF lea edi,dword ptr ss:[ebp-B0]
00640A52 |. B9 2C000000 mov ecx,2C
00640A57 |. B8 CCCCCCCC mov eax,CCCCCCCC
00640A5C |. F3:AB rep stos dword ptr es:[edi]
00640A5E |. E8 4BA60800 call <jmp.&KERNEL32.GetCurrentProcessId> ; [GetCurrentProcessId
00640A63 |. 8945 FC mov dword ptr ss:[ebp-4],eax
00640A66 |. 6A 00 push 0
00640A68 |. E8 95490700 call Nobol.006B5402 ; 演算用的第2个参数,API
00640A6D |. 83C4 04 add esp,4
00640A70 |. 8945 F8 mov dword ptr ss:[ebp-8],eax
00640A73 |. 837D 0C 29 cmp dword ptr ss:[ebp+C],29
00640A77 |. 7D 11 jge short Nobol.00640A8A
00640A79 |. 8B45 0C mov eax,dword ptr ss:[ebp+C]
00640A7C |. 50 push eax ; /Arg2
00640A7D |. 68 90A27000 push Nobol.0070A290 ; |Arg1 = 0070A290 ASCII "Warning:4220 SHA-1 keygen output buffer is smaller than 40byte. It usually needs 40 byte. len:%d
"
00640A82 |. E8 49CDFFFF call Nobol.0063D7D0 ; \nobol.0063D7D0
00640A87 |. 83C4 08 add esp,8
00640A8A |> 8D4D 98 lea ecx,dword ptr ss:[ebp-68]
00640A8D |. 51 push ecx ; /Arg1
00640A8E |. E8 FD030000 call Nobol.00640E90 ; \散列初始化
00640A93 |. 83C4 04 add esp,4
00640A96 |. 6A 04 push 4 ; /Arg3 = 00000004
00640A98 |. 8D55 F8 lea edx,dword ptr ss:[ebp-8] ; |
00640A9B |. 52 push edx ; |GetFileSystemTimeAs得到的参数
00640A9C |. 8D45 98 lea eax,dword ptr ss:[ebp-68] ; |
00640A9F |. 50 push eax ; |SHA散列值
00640AA0 |. E8 5B040000 call Nobol.00640F00 ; \nobol.00640F00
00640AA5 |. 83C4 0C add esp,0C
00640AA8 |. 6A 04 push 4 ; /Arg3 = 00000004
00640AAA |. 8D4D FC lea ecx,dword ptr ss:[ebp-4] ; |
00640AAD |. 51 push ecx ; |GetCurrentProcessId得到的值
00640AAE |. 8D55 98 lea edx,dword ptr ss:[ebp-68] ; |
00640AB1 |. 52 push edx ; |Arg1
00640AB2 |. E8 49040000 call Nobol.00640F00 ; \nobol.00640F00
00640AB7 |. 83C4 0C add esp,0C
00640ABA |. B8 01000000 mov eax,1
00640ABF |. 85C0 test eax,eax
00640AC1 |. 74 50 je short Nobol.00640B13
00640AC3 |. 8BF4 mov esi,esp
00640AC5 |. FF15 28E36E00 call dword ptr ds:[<&KERNEL32.GetTickCount>] ; [GetTickCount
00640ACB |. 3BF4 cmp esi,esp
00640ACD |. E8 3B600700 call Nobol.006B6B0D
00640AD2 |. 8945 90 mov dword ptr ss:[ebp-70],eax
00640AD5 |. 6A 04 push 4 ; /Arg3 = 00000004
00640AD7 |. 8D4D 90 lea ecx,dword ptr ss:[ebp-70] ; |
00640ADA |. 51 push ecx ; |Arg2
00640ADB |. 8D55 98 lea edx,dword ptr ss:[ebp-68] ; |
00640ADE |. 52 push edx ; |Arg1
00640ADF |. E8 1C040000 call Nobol.00640F00 ; \这个就是SHA的核心算法
00640AE4 |. 83C4 0C add esp,0C
00640AE7 |. 8B45 F8 mov eax,dword ptr ss:[ebp-8]
00640AEA |. 50 push eax
00640AEB |. E8 BC370700 call Nobol.006B42AC
00640AF0 |. 83C4 04 add esp,4
00640AF3 |. E8 C1370700 call Nobol.006B42B9
00640AF8 |. 0305 40DC8B00 add eax,dword ptr ds:[8BDC40]
00640AFE |. 8945 94 mov dword ptr ss:[ebp-6C],eax
00640B01 |. 6A 04 push 4 ; /Arg3 = 00000004
00640B03 |. 8D4D 94 lea ecx,dword ptr ss:[ebp-6C] ; |
00640B06 |. 51 push ecx ; |Arg2
00640B07 |. 8D55 98 lea edx,dword ptr ss:[ebp-68] ; |
00640B0A |. 52 push edx ; |Arg1
00640B0B |. E8 F0030000 call Nobol.00640F00 ; \nobol.00640F00
00640B10 |. 83C4 0C add esp,0C
00640B13 |> 8D45 98 lea eax,dword ptr ss:[ebp-68]
00640B16 |. 50 push eax ; /Arg1
00640B17 |. E8 D4210000 call Nobol.00642CF0 ; \nobol.00642CF0
00640B1C |. 83C4 04 add esp,4
00640B1F |. 8B4D A8 mov ecx,dword ptr ss:[ebp-58]
00640B22 |. 51 push ecx ; /Arg8
00640B23 |. 8B55 A4 mov edx,dword ptr ss:[ebp-5C] ; |
00640B26 |. 52 push edx ; |Arg7
00640B27 |. 8B45 A0 mov eax,dword ptr ss:[ebp-60] ; |
00640B2A |. 50 push eax ; |Arg6
00640B2B |. 8B4D 9C mov ecx,dword ptr ss:[ebp-64] ; |
00640B2E |. 51 push ecx ; |Arg5
00640B2F |. 8B55 98 mov edx,dword ptr ss:[ebp-68] ; |
00640B32 |. 52 push edx ; |Arg4
00640B33 |. 68 A4867000 push Nobol.007086A4 ; |Arg3 = 007086A4 ASCII "%08lx%08lx%08lx%08lx%08lx"
00640B38 |. 8B45 0C mov eax,dword ptr ss:[ebp+C] ; |
00640B3B |. 50 push eax ; |Arg2
00640B3C |. 8B4D 08 mov ecx,dword ptr ss:[ebp+8] ; |
00640B3F |. 51 push ecx ; |空地址
00640B40 |. E8 8B020000 call Nobol.00640DD0 ; \最终算出来的结果
00640B45 |. 83C4 20 add esp,20
00640B48 |. 5F pop edi
00640B49 |. 5E pop esi
00640B4A |. 5B pop ebx
00640B4B |. 81C4 B0000000 add esp,0B0
00640B51 |. 3BEC cmp ebp,esp
00640B53 |. E8 B55F0700 call Nobol.006B6B0D
00640B58 |. 8BE5 mov esp,ebp
00640B5A |. 5D pop ebp
00640B5B \. C3 retn
00646B10 /$ 55 push ebp
00646B11 |. 8BEC mov ebp,esp
00646B13 |. 83EC 58 sub esp,58
00646B16 |. 53 push ebx
00646B17 |. 56 push esi
00646B18 |. 57 push edi
00646B19 |. 8D7D A8 lea edi,dword ptr ss:[ebp-58]
00646B1C |. B9 16000000 mov ecx,16
00646B21 |. B8 CCCCCCCC mov eax,CCCCCCCC
00646B26 |. F3:AB rep stos dword ptr es:[edi]
00646B28 |. C745 EC 00000000 mov dword ptr ss:[ebp-14],0
00646B2F |. E8 DC030000 call Nobol.00646F10 ; 不用模拟,可能是清0的初始化的过程
00646B34 |. 8945 FC mov dword ptr ss:[ebp-4],eax
00646B37 |. 8B45 FC mov eax,dword ptr ss:[ebp-4]
00646B3A |. 50 push eax ; /Arg1
00646B3B |. E8 80080000 call Nobol.006473C0 ; \nobol.006473C0
00646B40 |. 83C4 04 add esp,4
00646B43 |. 8B4D 08 mov ecx,dword ptr ss:[ebp+8]
00646B46 |. 51 push ecx ; /收到服务器的表
00646B47 |. 8D55 FC lea edx,dword ptr ss:[ebp-4] ; |
00646B4A |. 52 push edx ; |Arg1
00646B4B |. E8 E00D0000 call Nobol.00647930 ; \nobol.00647930
00646B50 |. 83C4 08 add esp,8
00646B53 |. E8 B8030000 call Nobol.00646F10
00646B58 |. 8945 F8 mov dword ptr ss:[ebp-8],eax
00646B5B |. 8B45 F8 mov eax,dword ptr ss:[ebp-8]
00646B5E |. 50 push eax ; /Arg1
00646B5F |. E8 5C080000 call Nobol.006473C0 ; \nobol.006473C0
00646B64 |. 83C4 04 add esp,4
00646B67 |. 8B4D 0C mov ecx,dword ptr ss:[ebp+C]
00646B6A |. 51 push ecx ; /固定的表地址
00646B6B |. 8D55 F8 lea edx,dword ptr ss:[ebp-8] ; |
00646B6E |. 52 push edx ; |Arg1
00646B6F |. E8 BC0D0000 call Nobol.00647930 ; \是将表倒放并转换成十六进制
00646B74 |. 83C4 08 add esp,8
00646B77 |. E8 94030000 call Nobol.00646F10
00646B7C |. 8945 F4 mov dword ptr ss:[ebp-C],eax
00646B7F |. 8B45 F4 mov eax,dword ptr ss:[ebp-C]
00646B82 |. 50 push eax ; /Arg1
00646B83 |. E8 38080000 call Nobol.006473C0 ; \nobol.006473C0
00646B88 |. 83C4 04 add esp,4
00646B8B |. 8B4D 10 mov ecx,dword ptr ss:[ebp+10]
00646B8E |. 51 push ecx ; /SHA生成的表
00646B8F |. 8D55 F4 lea edx,dword ptr ss:[ebp-C] ; |
00646B92 |. 52 push edx ; |Arg1
00646B93 |. E8 980D0000 call Nobol.00647930 ; \nobol.00647930
00646B98 |. 83C4 08 add esp,8
00646B9B |. E8 70030000 call Nobol.00646F10
00646BA0 |. 8945 F0 mov dword ptr ss:[ebp-10],eax
00646BA3 |. 8B45 F0 mov eax,dword ptr ss:[ebp-10]
00646BA6 |. 50 push eax ; /Arg1
00646BA7 |. E8 14080000 call Nobol.006473C0 ; \nobol.006473C0
00646BAC |. 83C4 04 add esp,4
00646BAF |. E8 4C100000 call Nobol.00647C00
00646BB4 |. 8945 E8 mov dword ptr ss:[ebp-18],eax
00646BB7 |. 8B4D E8 mov ecx,dword ptr ss:[ebp-18]
00646BBA |. 51 push ecx ; /空地址,用来存放最终表
00646BBB |. 8B55 F8 mov edx,dword ptr ss:[ebp-8] ; |
00646BBE |. 52 push edx ; |固定表转换后地址,和大小的结构地址
00646BBF |. 8B45 F4 mov eax,dword ptr ss:[ebp-C] ; |
00646BC2 |. 50 push eax ; |SHA1表转换后和大小的结构指针
00646BC3 |. 8B4D FC mov ecx,dword ptr ss:[ebp-4] ; |
00646BC6 |. 51 push ecx ; |服务器表的结果
00646BC7 |. 8B55 F0 mov edx,dword ptr ss:[ebp-10] ; |
00646BCA |. 52 push edx ; |Arg1
00646BCB |. E8 60130000 call Nobol.00647F30 ; \重点检查这个CALL
00646BD0 |. 83C4 14 add esp,14
00646BD3 |. 8B45 E8 mov eax,dword ptr ss:[ebp-18]
00646BD6 |. 50 push eax ; /Arg1
00646BD7 |. E8 44110000 call Nobol.00647D20 ; \nobol.00647D20
00646BDC |. 83C4 04 add esp,4
00646BDF |. 8B4D F0 mov ecx,dword ptr ss:[ebp-10]
00646BE2 |. 51 push ecx ; /将要转换的结构体地址
00646BE3 |. E8 D80B0000 call Nobol.006477C0 ; \函数作用,将送进去的数组转换成字符串,返回EAX
00646BE8 |. 83C4 04 add esp,4
00646BEB |. 8945 EC mov dword ptr ss:[ebp-14],eax
00646BEE |. 8B55 EC mov edx,dword ptr ss:[ebp-14]
00646BF1 |. 52 push edx ; /原地址
00646BF2 |. 8B45 18 mov eax,dword ptr ss:[ebp+18] ; |
00646BF5 |. 50 push eax ; |大小
00646BF6 |. 8B4D 14 mov ecx,dword ptr ss:[ebp+14] ; |
00646BF9 |. 51 push ecx ; |目标地址
00646BFA |. E8 A190FFFF call Nobol.0063FCA0 ; \将字符形式转换成为数字
00646BFF |. 83C4 0C add esp,0C
00646C02 |. 8B55 EC mov edx,dword ptr ss:[ebp-14]
00646C05 |. 52 push edx ; /Arg1
00646C06 |. E8 55C3FFFF call Nobol.00642F60 ; \nobol.00642F60
00646C0B |. 83C4 04 add esp,4
00646C0E |. 8B45 FC mov eax,dword ptr ss:[ebp-4]
00646C11 |. 50 push eax ; /Arg1
00646C12 |. E8 A9070000 call Nobol.006473C0 ; \nobol.006473C0
00646C17 |. 83C4 04 add esp,4
00646C1A |. 8B4D F4 mov ecx,dword ptr ss:[ebp-C]
00646C1D |. 51 push ecx ; /Arg1
00646C1E |. E8 9D070000 call Nobol.006473C0 ; \nobol.006473C0
00646C23 |. 83C4 04 add esp,4
00646C26 |. 8B55 F8 mov edx,dword ptr ss:[ebp-8]
00646C29 |. 52 push edx ; /Arg1
00646C2A |. E8 91070000 call Nobol.006473C0 ; \nobol.006473C0
00646C2F |. 83C4 04 add esp,4
00646C32 |. 8B45 F0 mov eax,dword ptr ss:[ebp-10]
00646C35 |. 50 push eax ; /Arg1
00646C36 |. E8 85070000 call Nobol.006473C0 ; \nobol.006473C0
00646C3B |. 83C4 04 add esp,4
00646C3E |. 8B4D FC mov ecx,dword ptr ss:[ebp-4]
00646C41 |. 51 push ecx ; /Arg1
00646C42 |. E8 09020000 call Nobol.00646E50 ; \nobol.00646E50
00646C47 |. 83C4 04 add esp,4
00646C4A |. 8B55 F4 mov edx,dword ptr ss:[ebp-C]
00646C4D |. 52 push edx ; /Arg1
00646C4E |. E8 FD010000 call Nobol.00646E50 ; \nobol.00646E50
00646C53 |. 83C4 04 add esp,4
00646C56 |. 8B45 F8 mov eax,dword ptr ss:[ebp-8]
00646C59 |. 50 push eax ; /Arg1
00646C5A |. E8 F1010000 call Nobol.00646E50 ; \nobol.00646E50
00646C5F |. 83C4 04 add esp,4
00646C62 |. 8B4D F0 mov ecx,dword ptr ss:[ebp-10]
00646C65 |. 51 push ecx ; /Arg1
00646C66 |. E8 E5010000 call Nobol.00646E50 ; \nobol.00646E50
00646C6B |. 83C4 04 add esp,4
00646C6E |. 5F pop edi
00646C6F |. 5E pop esi
00646C70 |. 5B pop ebx
00646C71 |. 83C4 58 add esp,58
00646C74 |. 3BEC cmp ebp,esp
00646C76 |. E8 92FE0600 call Nobol.006B6B0D
00646C7B |. 8BE5 mov esp,ebp
00646C7D |. 5D pop ebp
00646C7E \. C3 retn
CLIENT固定表:
F488FD584E49DBCD20B49DE49107366B336C380D451D0F7C88B31C7C5B2D8EF6F3C923C043F0A55B188D8EBB558CB85D38D334FD7C175743A31D186CDE33212CB52AFF3CE1B1294018118D7C84A70A72D686C40319C807297ACA950CD9969FABD00A509B0246D3083D66A45D419F9C7CBD894B221926BAABA25EC355E92F78C7
SHA1生成的HASH
0AC13A0ABA5446826E646556DEBE9E13B489EE57
计算后发给服务器的表
B7FE5CC769237FC46629C02711BF54FD8D58D86A2667CD17FCA1E62E3EE928767A559274F6D4429A2F475F46D7AEE310F6B3E65731B6BC82791E8AF085B3DD45C95CB99BEF3CB257D36F6B9063007EA1594544D951785B59DA106E3B6D58B57BF9202E2801C966FE857F91602B7F930EEB4510F049C1FCCCBFCAA7D7693BDBB2
最终得到的表
C17FCDAF9A4AC8FA6427A3EBAD3B31563B68FBB36C678A55208E549AE892FE238C2132FFA7E7E21A554C287E378A96F8DB9067B9DEA4B3FDBB8B7606932E632BE7CE91F8F964D5E7144C49D2F7DB5C6C302DBA71E4FFEB460D31FADA52424014318F6F6A3BBC1727A2EC6465F5417ED03159F98343EAD0C3FBFE9987252686DA
我怎么算都得不到这个最终的表。。请大家帮忙看看
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)