题目:[Reverse Crackme]题目连接

要求:逆向并计算相应的key

题目分析

如图。是nSPack的壳,可以使用OD的esp定律脱壳。也可以使用脱壳机(百度就有)。为了简单,这里使用nSPack脱壳机进行脱壳。

如图。发现程序是一个控制台程序(可以查找main入口方法)瞎输入一些数字上去,显示字符串error,可以寻找字符串找到关键函数。

如上代码可知,程序要求输出一个字符串。之后判断字符串长度,满足条件后经过一个算法来判断字符串是否满足。满足输出right,否则输出error。分析该crackerme的关键便是这段逆向算法了。

如上为程序的关键算法。分析如下:

由if语句可知key的长度为42,否则会直接输出error。进入算法后会进入一个while循环,这里涉及2个字符串常量byte_402130dword_402150。双击这两个字符串常量发现如下图:

此处有个坑。初学者认为00402130这里的数据只有0x74这一个,其实不然,他是包含后面字符串的,所以后面字符串也是残缺的,整体字符串应为“this_is_no_flag”(这里一开始也踩坑了,菜的不行)。而后面00402150的数据也就比较好分析了,从12h到12h刚好42个数。

 while ( (*(&Buf + v4) ^ byte_402130[v4 % 16]) == dword_402150[v4] )

这行代码的行为也就十分明显了,逐个拿取输入的字符串(Buf为输入的字符串)与byte_402130[v4 % 16]做亦或运算,再将结果与00402150的数据进行比较,直到42个字符都比较正确,则输入正确,若有一个不正确则会输出error!

  1. PEID查壳
  2. 启动Crackme,验证软件功能
  3. 载入IDA PRO,F5进行分析
  4. 算法分析
  5. 下面是根据所给crackerme算法计算key的c++语言程序代码
#include <stdio.h>int _tmain(int argc, _TCHAR* argv[])
{int i;char s[] = "this_is_not_flag";char v[100] = { 0x12, 0x04, 0x08, 0x14, 0x24, 0x5C, 0x4A, 0x3D, 0x56, 0x0A, 0x10, 0x67, 0x00, 0x41, 0x00, 0x01, 0x46, 0x5A, 0x44, 0x42, 0x6E, 0x0C, 0x44, 0x72, 0x0C, 0x0D, 0x40, 0x3E, 0x4B, 0x5F, 0x02, 0x01, 0x4C, 0x5E, 0x5B, 0x17, 0x6E, 0x0C, 0x16, 0x68, 0x5B, 0x12 };for (i = 0; i<42; i++)printf("%c", (v[i] ^ s[i % 16]));getchar();return 0;
}

key就不给了,自己copy这个程序跑一下就知道了

一个简单Crackme的分析相关推荐

  1. [基因课学习笔记]一个简单的基因家族分析

    工作背景 探究在芝麻.大豆以及拟南芥中FAD4-like基因家族进化关系,并使其可视化(进化树) 操作环境及软件的准备 虚拟机应用:VMware Workstation pro 17 虚拟机操作系统: ...

  2. 《Linux内核分析》(二)——从一个简单Linux内核分析进程切换原理

    转载:https://blog.csdn.net/FIELDOFFIER/article/details/44280717 <Linux内核分析>MOOC课程http://mooc.stu ...

  3. 嵌入式Linux红外遥控,一个简单的IAL分析(红外遥控)(转)

    简单的IAL分析 一.程序说明 1.下面程序是基于一个红外的设备文件,从该设备中能接收到红外遥控的硬件编码. 2.两个文件需要覆盖掉libmingiui*/src/ial/中的两个文件编译时加上 -- ...

  4. Android 逆向笔记 —— 一个简单 CrackMe 的逆向总结

    温馨提示 请拖动到文章末尾,长按识别「抽奖」小程序. 在我的印象中,懂逆向的,都是大牛,让我们一起来看看下面这位大牛的学习心得. 无意中在看雪看到一个简单的 CrackMe 应用,正好就着这个例子总结 ...

  5. 哔哩哔哩公司swot分析_「127」一个简单的工具分析自己的优势与劣势

    今天要介绍的就是---SWOT分析方法. 何谓SWOT,SWOT是由优势(Strength).劣势(Weakness).机会(Opportunity)和威胁(Threat)四个单词的第一个字母组成. ...

  6. matlab_app实现一个简单的色彩分析可视化程序

    为了简化分析难度,我们只分析hvs颜色空间的色度信息 使用方法: select按钮来选择一张图片并绘制在坐标区1 start按钮点击后,可以在坐标区1获取点击的位置 滑动条来调整子图的尺寸 注意事项: ...

  7. 一个简单的词频分析统计程序

    花了点时间做了一个词频分析统计程序,分析了<失控>英文版(out_of_control)--Kevin_Kelly 的词频.要想流利的阅读英语文章,词汇量应该达到2万左右. 从词频分析来看 ...

  8. 一个简单自激振荡器电路分析

    图中用灯泡代表喇叭. 当开关按下,电流从X1-->C1--->R1--->Q1基极--->Q1--->发射极---->负  这个路径向电容充电,由于电容一开始电压不 ...

  9. nsa构架_我如何使用NSA的Ghidra解决了一个简单的CrackMe挑战

    nsa构架 by Denis Nuțiu 丹尼斯·努尤(Denis Nuțiu) 我如何使用NSA的Ghidra解决了一个简单的CrackMe挑战 (How I solved a simple Cra ...

最新文章

  1. 传说中的“智能袖套”:把柔性手机戴在手腕上
  2. kudu大量数据更新_Apache Kudu又更新?1.4版改进了Web界面
  3. zookeeper可视化工具zkui
  4. 学长毕业日记 :本科毕业论文写成博士论文的神操作20170328
  5. XP系统,CMD窗口总是只显示最后一屏的信息,如何能让全部信息都显示出来呢??
  6. redis——对项目的一些优化方案
  7. 在Windows Server 2008上安装和配置Web和FTP服务
  8. MSSQL-Server On Docker
  9. udp广播收到重复包
  10. Clover Configurator 5.17.4.0中文版(四叶草clover配置工具)
  11. PopClip 能让像苹果电脑像 iOS 一样选中文字后弹出搜索、复制、粘贴等选项
  12. 【web前端特效源码】使用HTML5+CSS3+JavaScript制作一个进度条动画效果~适合初学者~超简单~ |前端开发|IT软件
  13. hcia hdcp实验
  14. 神经网络学习小记录63——Keras 图像处理中注意力机制的代码详解与应用
  15. PTA-特立独行的幸福(简单C语言)
  16. 开源数据库全接触-MongoDB,Cassandra,Hypertable,CouchDB,Redis,HBase,Voldemort等35款数据库简介
  17. Python入门(10)——宝可梦数据集探索
  18. 为什么onenote一直在加载_2.为什么人人都需要OneNote?
  19. 网络效应VS平台效应,如何选择主要价值引擎?
  20. 老男孩mysql高级专业dba实战课程_老男孩MySQL高级专业DBA实战课程/高级运维DBA课程/MySQL视频教程下载...

热门文章

  1. 用类模板实现容器存储普通数据类型(类似于STL里面的vector)
  2. idea配置svn提交忽略配置文件
  3. 安装Pygame原来很简单
  4. 20220518面试题
  5. 九龙证券|超50亿主力资金砸盘计算机行业,这类股获资金青睐
  6. MiniDump不生成或者生成0字节
  7. 【优达学城测评】机器学习工程师纳米学位的学习体验
  8. 还不知道OFD是什么格式的文件?快来看看这篇文章吧
  9. labview 串口通信 modbusRtu
  10. 重力加速度与逃逸速度