obdg是一个反汇编软件

直接将要反汇编的exe文件拖入或者file->open打开文件,等待一段时间就会显示出来

界面中分别为汇编代码(程序内存内容),寄存器内容,数据内存内容,栈内容

代码界面的左侧是内存地址,右侧是代码的描述

步骤一:修改程序使注册一直成功

在分析程序反汇编代码之前:

在该程序中,打开注册页面,随意输入信息并点击注册会弹出对话框:

查看反汇编代码:

可以通过查看反编译之后的文字信息来确定部分代码的作用

这两段应该是分别对应成功注册和未成功注册的弹窗内容

可以看到,在push相应内容后调用了相同的程序段:MessageBoxA,应该是用于弹出指定栈内容的对话框。

猜测相关部分的逻辑:

那么这段功能的逻辑应该是有一个判断语句,根据结果是否为真分别跳转到上面图中的两段代码的push30处

确定要做的事:

只需要找到跳转到这两段程序的指令,并将判断条件修改为相反即可

遇到的问题:

直接在代码中找没有找到对应的跳转语句,执行step into会进入某些调用的API中跳不回来,执行step over又会执行到某些地方执行不下去。

用软件IDA pro反汇编得到了程序的逻辑图,在逻辑图中找到了对应成功注册的子程序。

接下来找到那部分代码调用了它:

可以看到调用者有一个cmp和一个jz语句,而且另一分支调用的子程序正是注册失败弹窗的功能,那么这里的判断就应该是要找的语句

打开代码视图:

找到对应的语句的内存地址为00401243

然后在odbg中找到对应的部分:

该语句跳转到0040124C,而0040124C又跳转到0040134D,即成功注册的弹窗

那么上面直接odbg中找的时候是没找到,而不是没有。直接找的时候误以为一定会有语句要求跳转到注册失败的语句(00401369),但是事实上程序的逻辑是判断条件正确就跳转到0040134D(成功注册),而失败的时候就直接顺序执行下去没有跳转语句。

修改程序二进制文件:

利用软件:Ultraedit

首先要找到对应的语句所在的具体存储位置:

文件偏移地址 = 虚拟内存地址(VA)- 装载基址(Image Base) - 节偏移

节偏移可以通过软件peid确定:V.Offset-R.Offset

所以文件偏移地址为:00401243-00400000-(00001000-00000600)=00000843

找到对应的位置,可以发现00000843和00000844正好是该跳转语句

修改为75 07:

生成的exe文件结果:

步骤二:寻找能成功注册软件的序列号

利用IDApro可以更方便的发现程序的结构:

下面的两个分别是输出成功注册和失败注册的弹窗,那么上面的子程序很可能就是处理在程序界面输入的name和serial,称之为子程序match

在OllyDbg中,在00401228处(即上面的子程序match起点处)设置断点单步执行,发现有以下的处理过程:

首先将name压栈,调用函数0040137E

该函数将按照name的每一位循环:

如果比’A’的ASSIC码值低就跳转到004013AC,这是注册失败时输出错误信息的子程序。

否则继续和’Z’比较,比‘Z’大,调用函数004013D2,作用为将ASSIC码减20,那么如果这个字符是小写字母,就会转化为相应的大写字母并存入

那么这部分的含义就是,循环判断所有name中的字符,如果符合是字母的条件就将字母转化为大写字母

全部判断完之后,调用004013C2,将所有字母的ASSIC码值加起来,返回。

继续将结果和00005678异或,结果放在EAX中

处理完name之后就将结果压栈,继而调用004013D8处理serial

函数作用:

EDI初始化为0

For:将密码的每一位

将EDI乘10

减30加在EDI中,

结果和00001234(dec4660)XOR并存入EBX

处理完serial之后将name和serial的结果比较,如果相等就注册成功,否则注册失败

注册的内容不是唯一的,只要符合条件即可

假设name是”mjb”,那么序列号需要满足:

先将序列号处理:对序列号从前到后的每一位,减去30H加上sum乘AH作为新的sum,sum初始化为0

则sum满足:

‘A‘ xor 00005678H =sum xor 00001234H

寻找这样的sum,为17557D

分解为(((16*10+14)*10+14)*10+17)

每一位加上30H即48D为64/62/62/65,对应的字符为”@>>A”

那么这样的一个注册将会成功:

Mjb//无所谓大小写

@>>A

obdg反汇编破解crackme的更多相关文章

  1. 软件破解入门(暴力破解CrackMe)

    ---恢复内容开始--- 所谓暴力破解,就是通过修改汇编代码进而控制程序的运行流程,达到不需注册码也能正常使用软件的目的.相对于解出算法进而编写注册机,暴破的技术含量是比较低的.但也正是因为一本05年 ...

  2. 破解 CrackMe#1 [UBC] by bRaINbuSY

    系统 : Windows xp 程序 : CrackMe#1 程序下载地址 :http://pan.baidu.com/s/1nuagj6h 要求 : 编写注册机 使用工具 :IDA & OD ...

  3. 破解 crackme(“不可逆“函数)

    系统 : Windows xp 程序 : crackme 程序下载地址 :http://pan.baidu.com/s/1i41oh9r 要求 : 注册机编写 使用工具 : IDA Pro & ...

  4. 破解 crackme(完全拆解警告窗口)

    系统 : Windows xp 程序 : crackme 程序下载地址 :http://pan.baidu.com/s/1kUrbcAr 要求 : 注册机编写 & 去除Nag窗口 使用工具 : ...

  5. macOS逆向-如何分析macOS软件

    目录 macOS逆向-如何分析macOS软件 0x00 前言: 0x01 分析环境搭建: 安装Clang 安装Radare2 关于HT Editor 什么是Radare2 Radare2的手动安装 测 ...

  6. SWD接口:探索&泄密&延伸

    http://bbs.21ic.com/icview-871133-1-1.html 文买了个JLINKV9,以为神器,拿到手发现根本不是,完全没必要替换V8,想自己做个另类的调试器,当然想只是想而已 ...

  7. Android权限安全(11)内置计费相关安全要点

    内置计费相关安全要点 1.计费Server接口保密且Transiction 加密 (SSL) 2.仅允许配套的安全本地组件(通常是第三方付费sdk如支付宝)与计费Server通信,且安全本地组件负责与 ...

  8. WinIo驱动级键盘模拟编程

    转自:http://blog.sina.com.cn/s/blog_455d7a320100vr37.html 前天无聊,翻翻自己的兴趣项目文件夹,发现了这个放下很久的项目!那是大三时候的事了.当时是 ...

  9. CommandoVM-虚拟机映像文件 | VM打开直接用

    呵呵!自从火眼发布了这个CommandoVM,想必大家应该都挺激动,然而实际操作一下,基本炸裂-- 因为并没有给类似于kali这种直接安装的现成镜像,而是要通过github的脚本去完全网络安装 实际操 ...

随机推荐

  1. CAS-ERR Cannot create a session after the response has been committed

    现象: 当cas 登录人数较少时候没有错误,但是用户过多时候出现下列err May-2016 18:09:11.932 SEVERE [http-nio-8080-exec-52] org.apach ...

  2. MongoDB学习笔记<七>

    继续MongoDB的学习 1.导出数据(中断其它操作) 把数据库test中的books集合导出 在终端下进行操作 mongoexport -d test -c books -o /home/hadoo ...

  3. bzoj1005: [HNOI2008]明明的烦恼(prufer+高精度)

    1005: [HNOI2008]明明的烦恼 题目:传送门 题解: 毒瘤题啊天~ 其实思考的过程还是比较简单的... 首先当然还是要了解好prufer序列的基本性质啦 那么和1211大体一致,主要还是利 ...

  4. java动态导出PDF(利用itext)

    项目基于ssm框架,使用itext动态导出pdf文件: 1.引入两个jar包:itextpdf-5.5.5.jar.itext-asian-5.2.0.jar 说明: 1.itextpdf-5.5.5 ...

  5. Debian9.5 系统配置持久化iptables规则

    RedHat和SUSE系列下有比较好用的iptables管理工具,可以像控制服务进程一样来对防火墙进行管理及控制,Debian系发行版默认不开启iptables,当然也没有与之相关的能直接管理的工具了 ...

  6. NodeJS学习笔记 (26)命令行设计-repl

    https://github.com/chyingp/nodejs-learning-guide

  7. 【agc004f】Namori Grundy

    那个问一下有人可以解释以下这个做法嘛,看不太懂QwQ~ Description 有一个n个点n条边的有向图,点的编号为从1到n. 给出一个数组p,表明有(p1,1),(p2,2),…,(pn,n)这n ...

  8. 洛谷1073 NOIP2009 最优贸易

    题目大意 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双 ...

  9. [NOIP2009提高组]最优贸易

    题目:洛谷P1073.Vijos P1754.codevs1173. 题目大意:有n点m边的图,边分有向和无向.每个点有一个价格,用这个价格可以买入或卖出一个东西.一个人从1出发,要到n,途中可以买入 ...

  10. ConEmu windows上的终端工具

    ConEmu Windows terminal   官网: http://conemu.github.io/