easy Reverse1
//曾经出给学弟的一道简单逆向题 ,没多大难度 ,凑合着玩玩吧这个NOP而已- -!等等看看怎么分析- -!
载入OD后 查字符串 然后找到good
然后就从001514E0 这个小循环开始分析
> /8A08 mov cl,byte ptr ds: ;把eax的值给CL(就是假码)
001514DA .8D9B 00000000 lea ebx,dword ptr ds:
001514E0 >8A08 mov cl,byte ptr ds: ;把eax的值给CL(就是假码)
001514E2 .40 inc eax ;eax+1
001514E3 .84C9 test cl,cl ;和EDX对比
001514E5 .^ 75 F9 jnz XReverse1.001514E0
001514E7 .2BC2 sub eax,edx ;edx减去eax 这里应该就是等于 取我们的 几位数字
001514E9 .8BD8 mov ebx,eax ;eax的值给ebx应该保存数值
001514EB .85DB test ebx,ebx
001514ED .7E 2D jle XReverse1.0015151C ;应该检测是否为0
001514EF .90 nop
001514F0 >8BC6 mov eax,esi ;初始化
001514F2 .99 cdq ;这里好像EDX清0
001514F3 .F7FF idiv edi
001514F5 .FE4434 18 inc byte ptr ss: ;假码 第1位数字加1
001514F9 .8A4C34 18 mov cl,byte ptr ss: ;把加1后的数值 给cl 保存
001514FD .8A5414 10 mov dl,byte ptr ss: ;取假码第1位给dl 准备异或
00151501 .32D1 xor dl,cl ;加1后 和原来的假码 一起异或
00151503 .3A96 2C511500 cmp dl,byte ptr ds: ;这里应该是和异或后的真码第一位比较
00151509 .75 11 jnz XReverse1.0015151C ;比较不对就跳走
小俊师傅 求教导!小菜分析的有没有错!
注册码长度必须是20 CTLers.s加上20位注册码===新的注册码
((新注册码第1位) 异或 (注册码的第1位自加1 )) CMP 24
((新注册码第2位) 异或 (注册码的第2位自加1)) CMP 39
((新注册码第3位) 异或 (注册码的第3位自加1)) CMP 2E
((新注册码第4位) 异或 (注册码的第4位自加1)) CMP 0D
0D 0E 13 2A 12 1F 54 0D 26 2A 3E 38 05 3E 15 39 2A
以此类推比较20次 全对就OK了写的有点乱 也不知道分析的对不对??
{:5_188:}
flag{_hER0~This_Key} 应该是注册码吧 //DeCode.c
#include <stdio.h>
int Mystrlen(char *pSrc)
{
int i=0;
while (*pSrc++ != '\0')
{
i++;
}
return i;
}
int main()
{
int CodeKey={36,57,46,13,14,19,42,18,31,84,13,38,42,62,56,5,62,21,57,42};//文件中提取
char *szKey="CTLers";
int nLen=Mystrlen(szKey);
for(int i=0;i<20;i++)
{
char cTmp=szKey^CodeKey;
printf("%c",--cTmp);
}
printf("\n");
return 0;
}
页:
[1]