能力值:
( LV7,RANK:100 )
2 楼
哥.那是与十六进制 3EA 作比较,不是3倍的eax.完全不是一个概念. 3EA转成十进制就是 1002 .
也就是说[esp+c]是与十进制的 1002 作比较.
真不知道你怎么混到用OD的!
能力值:
( LV7,RANK:100 )
3 楼
3EA 为一个十六进制的常数值. EAX是CPU内部的寄存器.
能力值:
( LV7,RANK:100 )
4 楼
基础很重要!
能力值:
( LV2,RANK:10 )
5 楼
那么我猜想,是和3倍eax 的值进行比较, 因为是3ea。。
3EA是十六进制数……等于十进制1002……
能力值:
( LV2,RANK:10 )
6 楼
打酱油路过,看看
能力值:
( LV2,RANK:10 )
7 楼
何不进去看下:call 00401200
能力值:
( LV4,RANK:50 )
8 楼
你把汇编当数学了,3ea是十六进制数0x3ea=1002,
我觉得你应该先学下计算机基础,或学一门编程语言.
有空看下汇编语言的教材.
能力值:
( LV9,RANK:140 )
9 楼
111是消息号。。。也就是WM_COMMAND消息。。
这里的3EA不是3*EAX。。而是一个数字。。。这里是那个按钮的控件ID 楼主的想象力之丰富。。。值得鼓励。。。
能力值:
( LV9,RANK:140 )
10 楼
验证过程如下:
.text:00401200 sub_401200 proc near ; CODE XREF: DialogFunc+13p
.text:00401200
.text:00401200 Tail = dword ptr -28h
.text:00401200 i = dword ptr -24h
.text:00401200 Length = dword ptr -20h
.text:00401200 result = dword ptr -18h
.text:00401200 String = byte ptr -14h
.text:00401200
.text:00401200 sub esp, 28h
.text:00401203 mov ecx, dword_4056BC
.text:00401209 push ebx
.text:0040120A push ebp
.text:0040120B push esi
.text:0040120C push edi
.text:0040120D lea eax, [esp+38h+String]
.text:00401211 push 14h ; cchMax
.text:00401213 push eax ; lpString
.text:00401214 xor ebx, ebx
.text:00401216 push 3E8h ; nIDDlgItem
.text:0040121B push ecx ; hDlg
.text:0040121C xor ebp, ebp ; ebp清零
.text:0040121E mov [esp+48h+result], ebx
.text:00401222 mov esi, 1
.text:00401227 xor edi, edi
.text:00401229 call ds:GetDlgItemTextA
.text:0040122F test al, al ; 长度是零?
.text:00401231 jz loc_4012FA ; 长度为零就跳走
.text:00401237 movsx eax, al
.text:0040123A test eax, eax
.text:0040123C mov [esp+38h+Length], eax ; 储存长度
.text:00401240 jle short loc_4012A5 ; 长度小于等于零就跳走
.text:00401242 lea edx, [esp+eax+23h] ; 指针移动到字符串最后一位
.text:00401246 mov [esp+38h+Tail], edx ; 储存最后一位的指针
.text:0040124A
.text:0040124A loc_40124A: ; CODE XREF: sub_401200+A3j
.text:0040124A test ebx, ebx
.text:0040124C jle short loc_40126C
.text:0040124E mov [esp+38h+i], ebx
.text:00401252
.text:00401252 loc_401252: ; CODE XREF: sub_401200+6Aj
.text:00401252 push 0
.text:00401254 push 0Ah
.text:00401256 push edi
.text:00401257 push esi
.text:00401258 call __allmul ; 做64位整数乘法的
.text:00401258 ; 乘数是0x0000000A,即十进制的10
.text:0040125D mov esi, eax ; 结果累加到esi
.text:0040125F mov eax, [esp+38h+i]
.text:00401263 dec eax
.text:00401264 mov edi, edx
.text:00401266 mov [esp+38h+i], eax
.text:0040126A jnz short loc_401252
.text:0040126C
.text:0040126C loc_40126C: ; CODE XREF: sub_401200+4Cj
.text:0040126C mov eax, [esp+38h+Tail]
.text:00401270 push edi
.text:00401271 push esi
.text:00401272 movsx eax, byte ptr [eax] ; 取一个字节
.text:00401275 sub eax, 30h ; 该位减0x30。这里应该是数字??
.text:00401275 ; (不过我觉得不是数字也可以)
.text:00401278 cdq
.text:00401279 push edx
.text:0040127A push eax
.text:0040127B call __allmul ; 相乘
.text:00401280 mov esi, [esp+38h+result]
.text:00401284 mov ecx, [esp+38h+Tail] ; 取指针
.text:00401288 add ebp, eax ; 结果累加到ebp上
.text:0040128A mov eax, [esp+38h+Length] ; 取长度
.text:0040128E adc esi, edx
.text:00401290 xor edi, edi
.text:00401292 inc ebx
.text:00401293 dec ecx ; 指针向前移动一位
.text:00401294 mov [esp+38h+result], esi
.text:00401298 cmp ebx, eax ; 是否结束循环?
.text:0040129A mov esi, 1
.text:0040129F mov [esp+38h+Tail], ecx ; 储存移动后的指针
.text:004012A3 jl short loc_40124A
.text:004012A5
.text:004012A5 loc_4012A5: ; CODE XREF: sub_401200+40j
.text:004012A5 mov edi, [esp+38h+result]
.text:004012A9 mov ecx, ebp
.text:004012AB mov edx, edi
.text:004012AD push edi
.text:004012AE not edx
.text:004012B0 not ecx
.text:004012B2 push ebp
.text:004012B3 push edx
.text:004012B4 push ecx
.text:004012B5 call __allmul
.text:004012BA push 0
.text:004012BC push 0BA2E8BA3h
.text:004012C1 push edi
.text:004012C2 push ebp
.text:004012C3 mov esi, eax ; 低四们累加到esi
.text:004012C5 call __allmul ; 结果乘以0xBA2E8BA3
.text:004012CA push 8
.text:004012CC push 0
.text:004012CE push edx
.text:004012CF push eax
.text:004012D0 call __alldiv ; 结果除以0x00000000800000000
.text:004012D5 add esi, eax ; 低四字节累到到esi中
.text:004012D7 and ebp, 0FF23301h ; ebp和0x0FF23301按位与
.text:004012DD add esi, ebp ; 结果与低四字节相加
.text:004012DF xor eax, eax
.text:004012E1 cmp esi, 86FFB5B8h ; 和0x86FFB5B8比较
.text:004012E7 jnz short loc_4012FA
.text:004012E9 test eax, eax
.text:004012EB jnz short loc_4012FA
.text:004012ED pop edi
.text:004012EE pop esi
.text:004012EF pop ebp
.text:004012F0 mov eax, 1
.text:004012F5 pop ebx
.text:004012F6 add esp, 28h
.text:004012F9 retn
.text:004012FA ; ---------------------------------------------------------------------------
.text:004012FA
.text:004012FA loc_4012FA: ; CODE XREF: sub_401200+31j
.text:004012FA ; sub_401200+E7j ...
.text:004012FA pop edi
.text:004012FB pop esi
.text:004012FC pop ebp
.text:004012FD xor eax, eax
.text:004012FF pop ebx
.text:00401300 add esp, 28h
.text:00401303 retn
.text:00401303 sub_401200 endp
简单的逆一下
BOOL Check()
{
char lpString[0x14];
int Length;
char *p;
long long n;
long long r;
long long m;
long long x;
n = 1;
r = 0;
Length = GetDlgItemText(HWND, 0x3E8, lpString, 0x14);
if (Length != 0)
{
p = lpString + Length - 1;
for (int i = 0;i < Length;i++)
{
for (int j = 0;j < i;j++)
{
n = n * 10;
}
r = r + n * (long long)(*p - 0x30);
x = r;
n = 1;
p--;
}
r = r * (0 - r - 1);
n = r;
r = r * 0xBA2E8BA3;
r = r / 0x800000000;
n = n + r;
r = x & 0xFF23301;
r = r + n;
if (r == 0x86FFB5B8)
{
return TRUE;
}
}
return FALSE;
}
C代码看着容易懂些。。。我数学不好。。。算了一个多小时算不出来。。。数学好的同学算一算
能力值:
( LV2,RANK:10 )
11 楼
下载来试试,也是学习学习,有体会再与分享。