逆向入门(14、15)程序逆向篇-Brad Soblesky.1-fty_crkme3
0x01 Brad Soblesky.1
这个就比较简单,打开后直接就是注册界面
OD
找到对应字符串
下个断点就读到了字符串<BrD-SoB>
,搞定
0x02 fty_crkme3
这个有壳,先用upx
脱壳,然后就可以找到关键代码信息了
跳转到关键代码处
发现这里是由esi
和edi
比较的结果,edi
由上面的数加也就是计算上来的,先追一下esi
esi
由上面的call
计算而来
这个call
的作用经由上面一步步的下断调试可以发现经过了很多次调用,最明显的第一次作用就是十进制的数转为十六进制,这里为了方便查看函数,可以进这个call
,然后在首行给他右键添加一个标签,比如我这里起个标签名叫dec2hex
,当标签起好以后再次看之前的内容就变成了下面这个样子,这样就会更加容易分析
这里是最近的一个esi
取值,但是这个地址并没有断下,说明还要继续往上找
正好就是这个地址这里进行的传值,那这个eax
又是由什么东西转成的十六进制呢?接着追
这里我手动调整了下注释,这样就看得比较清楚了,这里看着很复杂,但是实际上最后追出来的结果就是:如果这是一个9
位数的序列的话,第2
位和第6
位为要为-
符号,其他的必须要为数字,比如12-456-89
,然后将-
符号去掉,得到一个7
位数,将这个数转成十六进制后存储在esi
中。接下来再接着分析edi
是怎么来的了。
通过断点调试发现以上规律,即对每一位进行取值后,都进行这个整数的长度次的幂运算,现在长度为7
即,每位数都进行7
次方的处理,然后加所有的结果进行相加,最后要和这个数本身相同。那这样就可以写出注册机了
#include <stdio.h>int main() {int nums = 7;// 1. 预计算0-9的nums次幂(避免重复计算)int powers[10];for (int digit = 0; digit < 10; digit++) {int power = 1;for (int exp = 0; exp < nums; exp++) {power *= digit;}powers[digit] = power;}// 2. 精确计算范围(避免浮点数误差)int start_num = 1;for (int i = 1; i < nums; i++) {start_num *= 10;}int end_num = start_num * 10;// 3. 优化数字分解(避免使用字符串转换)for (int i = start_num; i < end_num; i++) {int n = i;int sum = 0;// 直接分解数字的每一位while (n > 0) {int digit = n % 10; // 获取最后一位数字sum += powers[digit]; // 使用预计算结果n /= 10; // 移除最后一位}if (sum == i) {// 4. 将数字格式化为 xx-xxx-xx 样式int part1 = i / 100000; // 前两位 (除以100000)int part2 = (i / 100) % 1000; // 中间三位 (除以100后取后三位)int part3 = i % 100; // 后两位 (模100)// 使用 %02d 确保两位数格式,不足补零printf("%02d-%03d-%02d\n", part1, part2, part3);break; // 找到第一个符合条件的数就退出}}return 0;
}
自己先写了一个,但是用的循环及使用pow
函数的方法,效率比较低,让ai
优化了下,香!
搞定
后来查了下资料,还挺有意思的,只能说编程知识真的少,又进步了!
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个数位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。
一位自幂数:独身数
三位自幂数:水仙花数
四位自幂数:四叶玫瑰数
五位自幂数:五角星数
六位自幂数:六合数
七位自幂数:北斗七星数
八位自幂数:八仙数
九位自幂数:九九重阳数
十位自幂数:十全十美数水仙花数又称阿姆斯特朗数。
三位的水仙花数共有4个:153,370,371,407;
四位的四叶玫瑰数共有3个:1634,8208,9474;
五位的五角星数共有3个:54748,92727,93084;
六位的六合数只有1个:548834;
七位的北斗七星数共有4个:1741725,4210818,9800817,9926315;
八位的八仙数共有3个:24678050,24678051,88593477;
九位的九九重阳数共有4个: 146511208,472335975,534494836,912985153;
十位的自幂数只有1个:4679307774