首页 > 编程语言 >CrackMe爆破与算法分析

CrackMe爆破与算法分析

时间:2023-05-10 22:55:38浏览次数:46  
标签:爆破 dump 算法 CrackMe 字符串 IAT 序列号 注册码

[abexcm5]

程序的功能:输入一个序列号,判断序列号是否正确。

爆破

根据错误提示信息,找到执行错误提示的代码段:

  

做了个比较,相等则出现正确提示。OD修改jcc指令绕过检查。

  

 成功破解

算法分析

GetVolumeInformationA获取所在盘符。与字符串"4562-ABEX"合并。

合并后前4个字节依次加1,循环两次。

再与字符串"L2C-5781"合并,得到正确的序列号

 

[Acid Bytes2]

程序的功能是比较一个序列号。

IDA发现函数和字符串都很少,PEid查壳,加了upx压缩壳。

脱壳三部曲

寻找OEP

  确定原始程序入口OEP在哪

dump内存

  保存原始程序入口之后的代码到新的文件

修复文件

  恢复dump出来的文件的IAT表

ESP定律法脱壳

加壳程序使用pushad、popad指令保存和恢复初始时寄存器的内容。利用堆栈平衡对esp下硬件断点即可找到原程序入口点。

x64dbg单步执行pushad指令,esp变为红色表示esp被修改。

  

给地址0018FF6C下硬件断点。

F9执行到断点处,连续F8运行到OEP

 

 x64dbg  Scylla插件dump内存到文件

 确认OEP为00442E44,点击"dump",保存文件为CrackMe2_dump.exe

x64dbg  Scylla修复IAT表

 点击"IAT autoSearch",自动检测IAT的偏移量和大小。

 点击"Get Imports",分析IAT的结构。

 点击"fix dump",选择CrackMe2_dump.exe。

生成脱壳后且IAT重建后的程序CrackMe2_dump_SCY.exe

爆破

 调试脱壳后的程序,查找字符串发现正确序列号,输入正确序列号即可破解程序。

算法分析:

  简单地比较硬编码字符串

 

[reg]

注册码共享软件(提供免费试用,但有使用次数,注册后才能正常使用)。输入用户名和注册码,生成带有用户名和注册码的.dll文件。

爆破

根据字符串“未注册”找到关键函数。

函数从.dll文件取出用户名和注册码,调用地址0x45D0F4处的函数。如果返回值为0,跳转到读取“未注册”字符串的代码;返回值为1,执行读取“您的有效期至”字符串的代码。

  

爆破思路一:

  je Reg.0045D58E改成 jne Reg.0045D58E,输入错误的注册码可以通过验证

  

爆破思路二:

  je Reg.0045D58E改成空指令

  

爆破思路三:

  修改0x45D0F4处的指令,使其始终返回1

  

算法分析:

分析0x45D0F4处的函数:判断注册码长度,判断字符ascii码,调用函数返回值指向注册码的字符串。

 

[ceycey]

输入密码,没有错误提示。点击“about”,显示一段话。

IDA发现函数列表很少。使用PEID查壳,加了UPX壳。

脱壳

ESP定律法找到OEP:004578F4

  

x64dbg Scylla插件dump到出文件并修复IAT。

Ollydbg分析脱壳后的程序

查看出现的字符串,定位到“Easy huh?”字符串所在的代码段,下断点。

爆破

静态分析

   

目标是让程序弹出“Easy huh?”。

保证jnz short loc_457642这条命令不跳转即可,直接nop掉。

算法分析

算法函数有两个参数。判断两个参数是否为空,都不为空,进入循环,两个参数每四个字节进行比较,如果两个参数全部相等,返回1。

动态分析寄存器可知两个参数分别为输入及正确的密码。正确的密码作为硬编码存在于代码中。

 

标签:爆破,dump,算法,CrackMe,字符串,IAT,序列号,注册码
From: https://www.cnblogs.com/jimmy-hwang/p/17384339.html

相关文章

  • 算法学习day11栈与队列part02-20、1047、150
    packageLeetCode.StackAndQueuepart02;/***20.有效的括号*给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。*有效字符串需满足:*左括号必须用相同类型的右括号闭合。*左括号必须以正确的顺序闭合。*每个右括号都有一个对应的相同类型的......
  • A∗算法
    \(A*\)算法这个算法其实就是dijkstra的变种,是对于一般的bfs的一种优化手段。首先需要设置一个东西叫做估价函数。普通的bfs的估价函数一般取\(0\)。这个东西如果你要保证一定正确,记起点到当前点的距离为\(d[i]\),到末尾的真实距离为\(g[i]\),设你的估价函数是\(f[i]\),......
  • 算法设计与分析
    算法设计与分析简答以比较为基础的检索算法的时间下界是O(logn);Ω还是O?以比较为基础的分类算法的时间下界是Ω(nlogn);简要说明理由:理由算法的五大特性:确定性,能行性,输入,输出,有穷性。而计算过程只满足前4条特性,不满足有穷性最优性原理:无论过程的初始状态或者初始决......
  • 类欧几里得算法小记
    类欧几里得算法大概是要求这样的一个东西:给定非负整数\(a,b,c,n\),求\(f(a,b,c,n)=\sum\limits_{i=0}^{n}{\lfloor\frac{ai+b}{c}}\rfloor\)。按道理来说整除问题一般是考虑除法分块,但是问题在于除法分块貌似适用范围是\(i\)在分母的情况。我们不妨从简单的方面入手,讨论一些......
  • kmp算法详解
    相关题目链接:LeetCode28.找出字符串中第一个匹配项的下标代码如下funcstrStr(sstring,pstring)int{//kmp算法,下标一般从1开始,//next数组表示的是最长相等前后缀的长度,也就是最少移动几位,使得前后缀相等,//s是主串,p是模式串n:=len(s)m:=len(p)......
  • TFIDF算法java实现
     一、算法简介       TF-IDF(termfrequency–inversedocumentfrequency)。       TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TFIDF实际上是:TF*IDF,TF词频(Ter......
  • 永磁同步电机的控制算法仿真模型: 1. 永磁同步电机的MRAS无传感器矢量
    永磁同步电机的控制算法仿真模型:1.永磁同步电机的MRAS无传感器矢量控制:2.永磁同步电机的SMO无传感器矢量控制(反正切+锁相环);3.永磁同步电机DTC直接转矩控制;4.永磁同步电机的有传感器矢量控制;5.永磁同步电机的位置控制YID:92128687292912454......
  • 异步电机有速度传感器矢量控制算法的C代码+仿真模型,仿真采用C代码直接在Simulink模型
    异步电机有速度传感器矢量控制算法的C代码+仿真模型,仿真采用C代码直接在Simulink模型里进行仿真的方式,当你不具备硬件调试的条件时,可以通过这种方法直接对代码进行仿真验证,所见即所得!采用双闭环解耦控制算法,转速外环电流内环,转矩与励磁解耦控制,SVPWM空间电压矢量调制,电流谐波很小,......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。第一章 数组part01
    今天开始第一天,其实之前也刷过题,也写过博客,可是没有坚持下去;主要是没有动力吧,我又是一个严重的拖延症患者,还好遇到刷到Carl哥的视频,记得是在bilibili分享的二分法视频,感觉讲的挺好的,就加了微信;然后发现有刷题训练营,太适合我这种人了,果断加入,哈哈,废话不多说,开始刷题。  第......
  • 基于一阶RC模型,电池带遗忘因子递推最小二乘法+扩展卡尔曼滤波算法(FFRLS+ EKF),参数与SOC
    基于一阶RC模型,电池带遗忘因子递推最小二乘法+扩展卡尔曼滤波算法(FFRLS+EKF),参数与SOC的在线联合估计,matlab程序YID:76100659957301925......