新手破解练习Crackme160之123 - noos.1
程序需要输入系列号验证, 没有错误提示, C++写的, 没有壳
OD载入程序, 搜索界面看到了成功关键词"Thank you for registering!", 定位到对应方法入口004013C0下断点~ F9运行点注册, 成功在入口处停下~ 开始单步算法分析, 00401489 ~ 004014A2 将输入串12位转为12位密串与注册码对比, 关键代码如下:
00401463 . 52 push edx
00401464 . 68 48304000 push noos_1.00403048 ; |%d
00401469 . 50 push eax ; |s = "" 将系列号字符串转整形
0040146A . FF15 84214000 call dword ptr ds:[<&MSVCRT.sscanf>] ; \sscanf
00401470 . 8B4C24 24 mov ecx,dword ptr ss:[esp+0x24]
00401474 . 51 push ecx ; /seed = 系列号整数作为随机因子
00401475 . FF15 B0214000 call dword ptr ds:[<&MSVCRT.srand>] ; \srand
0040147B . 8B3D B8214000 mov edi,dword ptr ds:[<&MSVCRT.rand>] ; msvcrt.rand
00401481 . 83C4 10 add esp,0x10
00401484 . BE 0C000000 mov esi,0xC ; 循环12次
00401489 > FFD7 call edi ; msvcrt.rand 得到一个随机数
0040148B . 99 cdq
0040148C . B9 1A000000 mov ecx,0x1A ; mod 0x1A
00401491 . F7F9 idiv ecx
00401493 . 8D4C24 0C lea ecx,dword ptr ss:[esp+0xC]
00401497 . 8A5414 24 mov dl,byte ptr ss:[esp+edx+0x24] ; "A~Z"字符串中取余数值对应位置的数
0040149B . 52 push edx
0040149C . E8 AD020000 call <jmp.&MFC42.#940>
004014A1 . 4E dec esi
004014A2 .^ 75 E5 jnz short noos_1.00401489
随机数的生产关键代码:
76D4C655 6948 14 FD43030>imul ecx,dword ptr ds:[eax+0x14],0x343FD ; mfc42.7781EB24
76D4C65C 81C1 C39E2600 add ecx,0x269EC3
76D4C662 8948 14 mov dword ptr ds:[eax+0x14],ecx
76D4C665 C1E9 10 shr ecx,0x10
76D4C668 81E1 FF7F0000 and ecx,0x7FFF
76D4C66E 8BC1 mov eax,ecx
eax = ((seed * 0x343FD) << 0x10) & 0x7FFF;
这里我们单步跟踪很容易得到12个余数分别是 19, 18, 18, 5, 19, 12, 4, 25, 3, 15, 10, 18, 接下来好像没什么办法能直接逆运算得到系列号, 只能暴破了
#include <stdio.h>
#include <string.h>
int myrand(unsigned int *seed){
*seed = *seed * 0x343FD + 0x269EC3;
return *seed >> 0x10 & 0x7FFF;
}
int main() {
int data[] = {19,18,18,5,19,12,4,25,3,15,10,18};
for(unsigned int i=0; i<0xFFFFFFFF; i++){
int s = 0;
unsigned int rlt = i;
for(int j=0; j<12; j++){
if((myrand(&rlt) % 0x1A) == data[j]){ s++; } else { break; }
}
if(s == 12){
printf("注册码: %d\n", i);
}
}
printf("结束\n");
getchar();getchar();
return 0;
}
%d / %ld (整形或长整形输出):
注册码: 692659380
注册码: -1454824268
%lld (长长整形输出):
注册码: 8562589888833725620
注册码: 8562589890981209268
经验证上面4个都通过~
1~160每个破解过程,在吾爱破解论坛都有高手破解过了,也有整理好现成的, 我这边主要就是自己动手操作的过程,与他们的不太一样
附上高手们的连接: 点击前往查看
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载
新人入门教程"玩玩破解,写给新人看" 点击前往查看
我就是从这里开始的,对我这样的小白感觉超级友好~
下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~


浙公网安备 33010602011771号