新手破解练习Crackme160之075 - fireworx.6
-
暴力破解, 点击事件004417B8, 向下找到第一个跳00441806, 直接nop掉进入成功分支~ 保存~
-
正常破解, 点击事件004417B8分析很容易知道算法在004416F8处, 我们F7进入方法分析具体算法:
for(int i=0; i<len; i++){
ebx=0x49390305
esi=0x48631220
ebx = ebx ^ code[i]
esi = esi ^ ebx
if(bl == 1){
ebx = ebx sar 1
if(sf != 0) ebx = ebx adc 0
} else{
ebx = ebx sar 1
if(sf != 0) ebx = ebx adc 0
ebx = ebx ^ 0x1200311
}
}
得到ebx, 与esi两个数, 各分为前后各4位, 组成1-2-3-4形式的字符串
注册机代码如下: keygen.c
#include <stdio.h>
#include "string.h"
int getVal(int val){
__asm__(
"test $1, %%bl\n"
"je sub1\n"
" sar $1, %%ebx\n"
" jns sub2\n"
" adc $0, %%ebx\n"
" sub2:\n"
" xor $0x1200311, %%ebx\n"
" jmp sub3\n"
"sub1:\n"
" sar $1, %%ebx\n"
" jns sub3\n"
" adc $0, %%ebx\n"
"sub3:\n"
:"=b"(val)
:"b"(val)
);
return val;
}
int main() {
char user[21] = {0};
printf("请输入用户名: ");
scanf("%s", user);
int len = strlen(user);
int ebx = 0x49390305;
int esi = 0x48631220;
for(int i=0; i<len; i++){
ebx ^= user[i];
esi ^= ebx;
ebx = getVal(ebx); //sar,adc,jns不好实现就直接用汇编了
}
int r1 = ebx & 0xFFFF;
int r2 = (ebx >> 0x10) & 0xFFFF;
int r3 = esi & 0xFFFF;
int r4 = (esi >> 0x10) & 0xFFFF;
printf("系列号为: %X-%X-%X-%X\n\n按任意键继续~", r1, r2, r3, r4);
getchar();getchar();
return 0;
}
1~160每个破解过程,在吾爱破解论坛都有高手破解过了,也有整理好现成的, 我这边主要就是自己动手操作的过程,与他们的不太一样
附上高手们的连接: 点击前往查看
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载
新人入门教程"玩玩破解,写给新人看" 点击前往查看
我就是从这里开始的,对我这样的小白感觉超级友好~
下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~