Referenced by a CALL at Address:
|:004010B0
|
:004010C9 56 push esi
:004010CA 57 push edi
:004010CB 51 push ecx
:004010CC 33F6 xor esi, esi
:004010CE 33FF xor edi, edi
:004010D0 B908000000 mov ecx, 00000008 ---定义循环次数
:004010D5 BE44304000 mov esi, 00403044 ---调出输入的密码
:004010DA 803632 xor byte ptr [esi], 32 ---把密码个字节与32取异或
:004010DD 46 inc esi
:004010DE E2FA loop 004010DA ---向上循环
:004010E0 BE44304000 mov esi, 00403044
:004010E5 B904000000 mov ecx, 00000004 ---8变4
:004010EA 8A06 mov al, byte ptr [esi]
:004010EC 8A5E01 mov bl, byte ptr [esi+01]
:004010EF 32C3 xor al, bl ---把变化后的密码前后取异或
:004010F1 88874C304000 mov byte ptr [edi+0040304C], al
:004010F7 83C602 add esi, 00000002
:004010FA 47 inc edi
:004010FB E2ED loop 004010EA ---向上循环
:004010FD BE4C304000 mov esi, 0040304C ---将生成的4个数变成2个
:00401102 8A06 mov al, byte ptr [esi]
:00401104 8A5E01 mov bl, byte ptr [esi+01]
:00401107 32C3 xor al, bl
:00401109 8A5E02 mov bl, byte ptr [esi+02]
:0040110C 8A4E03 mov cl, byte ptr [esi+03]
:0040110F 32D9 xor bl, cl
:00401111 32C3 xor al, bl ---再由2个变1个放入AL
:00401113 B908000000 mov ecx, 00000008
:00401118 BE44304000 mov esi, 00403044
:0040111D 3006 xor byte ptr [esi], al ---将生成的1个与原来的取异或
:0040111F 46 inc esi
:00401120 E2FB loop 0040111D
:00401122 B908000000 mov ecx, 00000008 ---从这往下开始比较
:00401127 BE44304000 mov esi, 00403044 ---放入算出的结果
* Possible StringData Ref from Data Obj ->"q"
|
:0040112C BF08304000 mov edi, 00403008 ---放入正确的结果
:00401131 8A06 mov al, byte ptr [esi]
:00401133 3A07 cmp al, byte ptr [edi]
:00401135 751D jne 00401154 ---跳向出错
:00401137 46 inc esi
:00401138 47 inc edi
:00401139 E2F6 loop 00401131 ---向上循环
:0040113B 6A40 push 00000040
模拟运算:
如果输入12345678
机器码 31 32 33 34 35 36 37 38
与32异或 03 00 01 06 07 04 05 0A ----(1)
8变4为 03 07 03 0F
4变2为 04 0C
2变1为 08 ----(2)
这个8变4, 4变2, 2变1是怎么来的
俺是只还没出壳的菜鸟,哪位能给俺讲讲
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课