我是靠谱客的博主 淡然乌冬面,最近开发中收集的这篇文章主要介绍od分析基础逆向6,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

程序①

打开程序
在这里插入图片描述
随意输入用户名密码
在这里插入图片描述出现错误字符
目标:得到该程序的相关序列号和了解序列号计算过程

载入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 <stdio.h>

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("%dn", 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

最后

以上就是淡然乌冬面为你收集整理的od分析基础逆向6的全部内容,希望文章能够帮你解决od分析基础逆向6所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部