新手破解练习Crackme160之081 - tsc

  1. 暴力破解, OD载入程序, 搜索错误关键字Try Again定位到00402912,向上找到入口下面的第一个关键跳00402884,改为nop直接进入成功分支, 保存, 暴破成功~

  2. 正常破解, 从上一步可知按钮入口是00402840, 输入Name: abcde, Serial: 12345, 开始单步分析算法,

    1. ecx有个固定值63617424先记录
    2. 0040287D处是一个关键算法方法(004029B0)进去看到几个固定值常量, 9901,  12790891,  8483678,  5666933
    3. 00402A30开始应该就是真正的算法处了, 我们认真盯住~^_^
    4. edx=系列号,  esi = -1,  edi = edx,  ecx = esi, eax = 0,  [0x660]=3
    5. ecx = 系列号长度 不等于14则跳转 00402A49处,  ecx = 9901,  [0x660]=-1, eax=0跳到失败
    6. 所以系列号必须是14位, 我们重新输入系列号:12345678901234, 重来一遍
    7. 00402A49处不再跳转, 继续下一步, 开始循环读取系列号s,  al = s[i], al ?= '0'~'9'就是判断是不是数字, 如果是数字, 就判断下一位
    8. [0x17]=0, [0xF]=0, ecx = s[0~3], cx=s[4~5],  ecx=s[6~9], al=s[6], 
        [0x8]=ecx,  [0x16]=al,  eax=s[7~], ecx=s[0~6], dx=s[1~2],  al=s[3], ecx='\r', [0x10]=dx,  [0x12]=al
    9. ecx = len(s[0~6])+1 = 8 shr 2 = 2,  (00402AB2这个方法有点没看懂, 先跳过)
    10. edx = 12790891,  eax = 9901
    

后面的算法非常长, 决定放弃了, 其实对RSA算法了解的同学, 应该可以直接看出, 9901是RSA中的e值, 而12790891则是N值, 其实作者在about中也说明了用的是RSA24算法, 剩下两个常量都是7位, 则是系列号对应的对比密文, RSA算法还需要找出p, q, (p=1667, q=7673大佬算出来的), 继续取出r与d, r=(p-1)(q-1)=12781552, (ed % r = 1) => d=10961333; 明文=quick_pow(密文, d, N); 得到明文系列号为: 71676223196885, 跟踪过程中可发现, 两段密文只要其中一段正确都算成功, 所以, 系列号可以有三种:
1. 两段都对: 71676223196885
2. 只前段对: 7167622xxxxxxx (x为任意数字)
3. 只后段对: xxxxxxx3196885 (x为任意数字)

附上大佬代码:

#include <stdio.h>
#include "string.h"

long long quick_pow(long long x, long long n, long long m) {
	long long res = 1;       
	while (n > 0) {
		if (n & 1) res = res * x % m;               
		x = x * x % m;               
		n >>= 1;
	}
	return res;
}

int main() {
	long long e = 9901;
	long long N = 12790891;
	long long encode1 = 8483678;
	long long encode2 = 5666933;
	long long end = N / 100;
	long long p, q;
	for (p = 3; p < end; p += 2)
	{
		for (q = 3; q < end; q += 2)
		{
			if (p * q == N) break;
		}
		if (p * q == N) break;
	}
	printf("p=%lld,q=%lld\n", p, q);
	long long r= (p-1) * (q-1);
	printf("r=%lld\n", r);
	long long d = 1;
	while (1)
	{
		if (e * d % r == 1) break;
		d++;
	}
	printf("d=%lld\n", d);
	long long decode1 = quick_pow(encode1, d, N);
	long long decode2 = quick_pow(encode2, d, N);
	printf("系列号为: %lld%lld", decode1, decode2);
	getchar();getchar();
	return 0;
}

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

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

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

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

posted @ 2024-05-24 11:45  hankerstudio  阅读(25)  评论(0)    收藏  举报