大家好 问问大家一段注册码算法怎么分析的
--------------------------------------------------------------------------------------------------------
004677E0 55 PUSH EBP
004677E1 8BEC MOV EBP,ESP
004677E3 83C4 E8 ADD ESP,-18
004677E6 53 PUSH EBX
004677E7 56 PUSH ESI
004677E8 57 PUSH EDI
004677E9 33C9 XOR ECX,ECX
004677EB 894D EC MOV DWORD PTR SS:[EBP-14],ECX
004677EE 894D E8 MOV DWORD PTR SS:[EBP-18],ECX
004677F1 8BF0 MOV ESI,EAX
004677F3 8D7D F0 LEA EDI,DWORD PTR SS:[EBP-10]
004677F6 A5 MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ES>
004677F7 A5 MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ES>
004677F8 A5 MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ES>
004677F9 A5 MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ES>
004677FA 8BFA MOV EDI,EDX
004677FC 33C0 XOR EAX,EAX
004677FE 55 PUSH EBP
004677FF 68 7B784600 PUSH fbi1.0046787B
00467804 64:FF30 PUSH DWORD PTR FS:[EAX]
00467807 64:8920 MOV DWORD PTR FS:[EAX],ESP
0046780A 8BC7 MOV EAX,EDI
0046780C E8 7FCFF9FF CALL fbi1.00404790
MOV BL,10
LEA ESI,DWORD PTR SS:[EBP-10]
PUSH DWORD PTR DS:[EDI] ; 局部变量[EDI]保存本数据段的总长度
LEA EAX,DWORD PTR SS:[EBP-14] ; [EBP-14]指向本段的开始(从段类型算起)
XOR EDX,EDX
MOV DL,BYTE PTR DS:[ESI] ; 依次移入算好后的字符到dl
SHR EDX,4 ; EDX数值÷16
AND EDX,0F ; 取1位
MOV DL,BYTE PTR DS:[EDX+488064] ; 出现前1位 'a'
--------------------------------------------------------------------------------------------------------
MOV BL,10
解释:BL=B0
LEA ESI,DWORD PTR SS:[EBP-10]
解释:堆栈地址=0012ECB4
ESI=0012ED48
PUSH DWORD PTR DS:[EDI] ; 局部变量[EDI]保存本数据段的总长度
解释:堆栈 DS:[0012ED20]=00000000
LEA EAX,DWORD PTR SS:[EBP-14] ; [EBP-14]指向本段的开始(从段类型算起)
解释:堆栈地址=0012ECB0
EAX=0012ED20
XOR EDX,EDX
解释:EDX=00000000
MOV DL,BYTE PTR DS:[ESI] ; 依次移入算好后的字符到dl
堆栈 DS:[0012ECB4]=A7
; 问题?这个怎么出现的,怎么知道这个是A7了
DL=00
SHR EDX,4 ; EDX数值÷16
解释:EDX=000000A7
AND EDX,0F ; 取1位
解释:EDX=0000000A
MOV DL,BYTE PTR DS:[EDX+488064] ; 出现前1位 'a'
解释:DS:[0048806E]=61 ('a')
; 这个就是注册码的前一位,但是也不明白怎么计算出来的
DL=0A (Line Feed)
我不明白最后一步“a”怎么来的?大家能帮我看看怎么分析吗?
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)