简单入个门-re篇-01

简单入个门-re篇-01

注:本文章为个人笔记,只不过以教程的方式呈现(个人喜好),并且会在多平台发布,如有不足,欢迎指出

本章先粗略的演示一下逆向的流程,不涉及很多基础知识,如果要深入学习逆向,请自行学习C语言和汇编语言

文末附有本章所需文件下载地址

建议

学逆向专门开一台虚拟机,磁盘空间可以开大一点(200G我觉得不过分),免得物理机被玩坏了(虚拟机要多备份快照)

1.软件功能初步分析

尝试软件

附件包中有名为TraceMe.exe的文件,这个为我们这次逆向演示的文件

打开文件我们发现会有如下页面

1

随便输入一个用户名序列号,点击Check,会弹出序列号错误,再试一次的提示

猜想软件逻辑

我们可以有以下猜想:

  1. 程序定义了两个变量name,number
  2. 然后从窗口中获取两个变量的值
  3. 点击确认后,程序检验name和number是否匹配

可以猜想程序有以下代码

char name[10] = 通过什么API获取;
int number = 通过什么API获取;

if (name == "xxx" && number == yyy ){
    弹出正确;
}
else{
    弹出序列号错误,再试一次;
}

那猜想就到这,接下来演示Ollydbg的使用

2.Ollydbg逆向软件初步演示

Ollydbg安装

附件包中,有一个ollydbg.rar的压缩包,解压之后,打开吾爱破解.exe即可

用Ollydbg打开代逆向文件

直接把TraceMe.exe拖进去就行,然后会有如下页面

2

我们可以发现Ollydbg定位到了004013A0这个地址,程序的起点

设置断点

先点开这个选项(下图)

3

然后在弹出的窗口,勾选上这些(下图)

4

接着点击窗口正下方确定

调试程序

添加好断点后,我们直接点上方的三角形(下图),运行程序,接着就会弹出程序的窗口,然后就随便输入个用户名和序列号,接着check

5

就会发现断点GetDlgItrmTextA生效了(下图)

6

接着我们再次运行,运行两次后,又到了这个断点GetDlgItrmTextA(下图),正如我们前面猜想的一样,程序分别获取了用户名和序列号

7

我们继续运行程序,然后TraceMe.exe就会弹出序列号错误的报错

(其实这里我们可以把刚刚设置的GetWindowTextA去掉,因为经过调试,我们可以发现经过的断点只有GetDlgItrmTextA,这里就不演示了,跟添加没什么区别)

继续点Check,再次调试程序,程序又到了断点

我们上面的猜想是,程序在获取我们的输入后,会赋值给两个变量,这里我们要找到我们的输入存放在哪里

我们就可以点击最右边的这个按钮(Ctrl+F9),跳转到返回(如下图)

5

然后就在这停下

8

接着我们进入这个地址(下图第3个按钮或F7),进入内部

5

进入内部后,我们可以发现有两个GetDlgItrmTextA(滚轮上滑)(也就是我底色标黄的地方),分别对应这两次输入的获取,看来我们找对地方了,然后我们点击上图第4个按钮或F8一步步调试

9

但是到我圈出来的位置时,会跳转到刚刚的位置(如下图)

7

问题不大,这意味着在进行第二次输入获取(第一次在上面已经经过了)

被跳转到刚刚这个页面,我们用同样的方法进入到retn 0x10里面

8

再进行一步步调试

10

在执行红圈标注的地方时,主意观察右边的寄存器,会发现出现了我们刚才的用户名和序列号,他们分别被保存在EDX和EAX中

11

接着到绿圈标记的地方时,我们可以发现这是个函数,应该就是用于验证序列号和用户名的,接着我们跳入函数,就如上文的方法一样(下图第3个按钮或F7)

5

然后我们就会进入一个循环,注意红色的箭头,表示着这步语句会跳转到哪里,如果是绿色的话就意味着条件不符合无法跳转

因为这里会进行很多次循环,我们为了节省时间,直接选中循环外的语句(就是跳转外的语句),按F4直接执行到该位置

12

退出循环后,到这里时

13

注意观察寄存器

14

我们会发现出现了1175117,这个似乎是正确的用户名和序列号,但是经过多次测试,发现这个是随机生成的,所以知道这个并不能有效破解

然后我们接着执行

15

到这里时,我们发现,EAX发生变化,依据经验判断,这应该是验真函数的返回值,0也就是假,但是这里我们也不好修改,如果是正确的,应该是什么值,所以这里也不好破解

16

然后我们退出那个函数,很快就遇到了一个大的跳转

17

我们可以猜想这个跟弹出错误正确有关,我们先按照这个执行,跳转后果然报出序列错误

所以我们尝试让他不跳转

先右键所选命令,点击汇编

18

改为如下,点击汇编,不要多点,只要一下,窗口不会自己关掉

19

然后直接运行,不用单步调试,发现就成功了

20

总结

通过Ollydbg的分析,我们发现,这个程序并不是想我们之前的猜想一样,是if else这种分支,而是在判断用户名与序列号是否匹配后,决定是否跳转,如果跳转就会省略一些命令,就会报不正确

Ollydbg的逆向基本的演示就到这里,这里基本没有涉及什么知识,还有许多的知识待学习,一定要自己去演示一遍

C语言-手动将代码转到exe

注:以下会生成一些代码,建议可以用npp查看,附件包里面有

看完上文,应该对逆向有些了解.
学习逆向,一定要会正向
并且要比普通的开发者要会多一点
这里就来演示一下,手动将C代码转到exe

安装IDE

附件包中,打开codeblocks-20.03mingw-setup.exe,按提示安装就行,但是注意,这里要全选.并且这里挺久的,快捷方式创建好了,并不代表C语言环境安装好

21

将gcc所在目录添加到环境变量

这是我的路径,你们应该会以此类推吧

C:\Program Files\CodeBlocks\MinGW\bin

在命令行中输入gcc -v看有没有报错,没有就可以了

写入代码

#include <stdio.h>

int main() {

    printf("hello Haicaji!");
    return 0;
}

预处理 .c -> .i

gcc -E test.c -o test.i

这里将.c代码中的头文件展开,就是把头文件的全部内容替换掉#include这句话

编译 .i -> .s

gcc -S test.i -o test.s这里是将C语言代码转为汇编代码

汇编 .i -> .o

gcc -c test.s -o test.o这里是将汇编代码转为机器码

objdump -d test.o可以将机器码稍微反汇编一下

链接 .o -> .exe

gcc test.o -o test.exe这里是将机器码链接为exe文件

附件包下载链接(可以来个好心人转存到友好的下载地址)

解压密码Haicaji

链接1:https://pan.baidu.com/s/1kgAKyCD0_sxiOvC-o86szw?pwd=918i 提取码:918i

Ollydbg快捷方式一览

暂时没有找到

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还差几

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值