xiaoyu2032 发表于 2022-5-29 23:11

练习笔记之160Crackme-018、019

# 160CM-018、019

  这期比较简单,直接二合一了。

## 1. 018

  018很简单,直接搜索字符串就能找到关键跳转位置,前后翻看一下就能找到明文密码:`<BrD-SoB>`。


## 2. 019爆破

  019爆破也很简单,搜索字符串,根据字符串的内容就能定位到三个不同的弹窗提醒的位置,然后查看一下前面的跳转的位置,就能确定关键跳转在401642位置,nop掉就可以。


## 3. 019算法

  这道题算法也比较简单,找到关键跳转后,前面的一小段代码就是算法代码。IDA打开后,F5生成伪代码,将变量名修改一下,就可以得到下面的代码:

  其中有几个自定义函数,水平有限,IDA里面看不出来是什么功能,在OD里面动态跟踪一下就能基本确定是什么功能了。
  整理调试,最后得到注册算法代码如下:

``` cpp
#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
char text1;
unsigned long i,length,output,value;
output = 0x81276345;
printf("请输出text1:");
scanf_s("%s",text1,50);
length = strlen(text1);
if (length >= 5)
{
for (i = 0; i < length; i++)
{
   value = text1;               // 取第i个字母
   output += value;
   output ^= i << 8;
   output *= ~(i * length) * (i + 1);
}
}
printf("注册码为:%lu",output);
system("pause");
return 0;
}
```

  这里需要稍微注意一下的是,整型计算的变量要定义成长整型,有无符号无所谓,但是最后打印输出字符串的时候要用无符号的格式`%lu`进行输出,否则得到的都是负数。注册码验证如下:

白鱼啊 发表于 2022-5-30 00:11

xiaoyu2032 发表于 2022-5-30 08:51

白鱼啊 发表于 2022-5-30 00:11
大佬你这个课程是吾爱官方里面的吗?

这个不是课程,这是从论坛下的一个打包好的160个crackme程序,自己尝试破解,写的一个笔记。当然,论坛里面已经有很多这些题的破解教程,破解前尽量不看。

iloveasdl 发表于 2022-5-30 09:03

学习了!!

z7138910 发表于 2022-5-30 21:54

{:1_899:}感谢大佬分享,收藏学习下!

白鱼啊 发表于 2022-5-30 23:42

huaxiaoron 发表于 2022-5-31 17:14

感谢大佬分享,学习下!
页: [1]
查看完整版本: 练习笔记之160Crackme-018、019