查壳没有壳
用od打开
中文搜索引擎,找到correct的位置
发现有两个跳转,设上断点,然后运行,弹出输入框,先在输入框中随便输入123456,check,
然后就到了0040106C,然后单步往下执行,跳转到了00404690,继续单步往下执行
发现运行到004046A9程序就崩,重新载入到这个地方之后F7,进入函数
也就是将0x90赋值给eax这个地址,然后百度了一下0x90,查到
NOP指令即“空指令”,在x86的CPU中机器码为0x90(144)。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。所以NOP指令自然也会占用执行一个指令的CPU时间片。
即是将eax这个地址的内容换成nop
然后004046AE这行是eax+1
然后下一个call是将刚刚换的那个地址+1也换成nop
然后我们再看刚刚的两个跳转,第一个跳转跳到下面之后再跳到第二个跳转,第二个跳转又跳过了输出的correct!,也就是说我们不能让第二个跳转执行,所以应该把第二个跳转改成nop,eax应该是401071
所以接下来看eax是怎么得到的
这个地方是将0x4084d0处的内容给eax,将地址转到4084d0,其内容是6017E80B
然后右键查找所有常量
转到初始
进入call函数,F7单步往下执行
下面的地址转到4084D0时刻关注是怎么变换的
然后单步执行
发现运行到db 81之后4084D0就由输入变成了6017E809,然后后面还有两个+1,所以最后出来的是6017E80B,
百度db指令是伪操作指令,但是还是没看懂是怎么由输入转换成的
重新载入将输入换成0
再重新看这个函数,发现到db 81后,4084D0变成了601605C9.执行完这个函数后,是601605CB
然后发现6017E80B-601605CB就等于输入的1314
也就是说601605CB+?=100401071
所以算出来结果为2687109798
输入后执行
完成
未解决的问题:db 81 那一行命令是如何操作的