新手破解练习Crackme160之075 - fireworx.6

  1. 暴力破解, 点击事件004417B8, 向下找到第一个跳00441806, 直接nop掉进入成功分支~ 保存~

  2. 正常破解, 点击事件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;
}

 
 
 
这是160个软件part1
这是160个软件part2

1~160每个破解过程,在吾爱破解论坛都有高手破解过了,也有整理好现成的, 我这边主要就是自己动手操作的过程,与他们的不太一样
附上高手们的连接: 点击前往查看
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载

新人入门教程"玩玩破解,写给新人看" 点击前往查看
我就是从这里开始的,对我这样的小白感觉超级友好~

下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~
OD界面布局

posted @ 2024-05-23 17:32  hankerstudio  阅读(5)  评论(0)    收藏  举报