nag在逆向中是什么意思_od分析基础逆向6

本文介绍了如何通过逆向工程技术分析程序以获取序列号计算过程,以及如何解除NAG窗口。在程序①中,通过OD分析找到计算序列号的流程,得出序列号算法。而在程序②中,详细解析了加解密步骤,找出关键代码位置进行修改,成功移除了NAG窗口。
摘要由CSDN通过智能技术生成

程序①

打开程序

随意输入用户名密码

出现错误字符

目标:得到该程序的相关序列号和了解序列号计算过程

载入od

在od中右键查找相关字符

容易发现输入正确后的字符串

可双击字符进入字符所在的messageBox输出函数

同时向上翻找计算流程

出现一段循环推测可能为计算序列号

再向上翻找

出现两段GetDlgItemTextA函数,为对应两个输入框

寻找关键函数也可以通过对GetDlgItemTextA函数下断点进行调试来寻找

此处为command 框

输入:bp + (关键函数名,此处为GetDlgItemTextA)可以下断点

然后alt + F9 从系统领空返回

继续进行调试

该段判断密码是否为空

观察流程可以大概知道计算结果存储于ESI中,后面于403138数据段(存储输入信息)的值比较来决定跳转

可以将计算得知的ESI数据的值从message中输入来得知序列号

修改代码为

这样来实现将计算出来的ESI值存储在未使用的数据段439000,然后利用messageBox输出

保存代码进行查看

出现乱码

进入439000数据段查看

此时ESI存储的值为6A248

对进行流程进行分析

输入的用户名为abcd 序列号为123456

sar也可以理解成对a的整除

在此基础上可以改进算法为 2aa+(a*a/2 +3)a-a 化简为 a(1/2 a+1)(a+2)

如此循环四次

可利用其他语言进行计算

#include

main()

{

int i, result = 0;

char a[] = "abcd";

for( i=0; i < 4; i++ )

{

result += a[i]*a[i] + (a[i]/2+3)*a[i] - a[i];

result *= 2;

}

printf("%d\n", result);

}

输出为十进制434760转换为十六进制6a248

测试成功

程序②

打开程序

出现一个nag窗口

点击确定

出现主体

将程序载入PEiD

显示该程序无壳为MASM编写的

载入od

发现下方出现nag窗口相关的字符串

尝试在call处下断点并单步调试

发现程序在此处运行且下方messagebox函数未使用

证明下方函数无实意

进入call函数内查看

发现函数内od分析出现异常

尝试先关闭分析

第一张为调试前的代码,第二张为调试后的代码,可以观察出经过运行代码自身出现了变化,同时出现了nag窗口的ASCII

将od分析去除进行分析

接下来对代码进行分析

先call调用GetModuleHandleA函数返回eax400000,然后存放在403130位置,再将401011存放在edi

进入第二个call

函数将eax赋值401000

然后对401000处的代码与5A进行异或,然后eax自增

在BeginPaint处记载对代码修改的位置

在这个函数中程序对自身进行了修改

明确此函数作用后继续分析下一个call

进入第二个call

首先清空eax的值

同此时edi的值为401011

程序运行到mov后开始修改自身此段代码

运行至下一个call前程序自身出现了修改

od分析后出现一段带有乱码的messagebox函数

继续分析

call的地址是edi的401000,为已经修改后的代码

此部分再次出现异或语句,解密的范围为403000到403128

同时观察到下方乱码的位置同样在解密的范围内

调试跳出循环

乱码内的字符已被解开

继续调试跳出nag窗口

点击确定回到od

回到od后jmp跳转至此处,发现程序对edi的值401011代码继续进行修改,然后调用edi的值

进行下一步跳转

在下一个call处出现主体部分

关闭主体部分后 jmp跳转至下一个部分

进入该call查看

发现此处对nag的窗口继续进行修改

在数据窗口进行观察

修改后

可见程序对nag窗口部分在结束处继续加密来防止查找字符串发现

后面结束程序

整理程序前两步加解密思路:

①401000到401218 xor 0x5A

②401011到401025 修改代码

若直接修改代码在出现nag的messagebox则在前两步对代码进行修改中会发生变化

则应该让前两步修改代码后达到去除nag的目的

目的为在此处修改代码

返回第二步寻找修改的代码

观察edi的值得知此为修改处

数据窗口中跟随

找出此处为401039

需要让00 最后显示为01

根据加密规则 需要输入5b xor 5a = 01

保存修改

测试成功 nag窗口被去除

同理可以修改指令为jmp来跳过messagebox

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值