码迷,mamicode.com
首页 > 其他好文 > 详细

EasyRE

时间:2020-06-03 21:55:25      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:i++   pre   过程   代码   静态   搜索字符串   int   com   结果   

0x01

首先拿到一个exe执行程序,无壳,我们先运行一下,发现只要输入结果后就会退出,那看来是我们输入的不正确就会退出

技术图片

由于是exe程序,所以我首先进行的是debug动态调试,因为有输入就会有与正确密码的对比,所以我先看看它的正确密码有没有进行加密算法加密

0x02

动态调试:

一、搜索字符串

技术图片

我们看到有right,有pause,所以这个上面肯定有对比,然后我们可以在这个上面函数入口处下断,经过调试发现,这里的密码是被算法加密过的,所以无法直接看到。

二、跟进函数

技术图片

进去主函数,是上图的这段代码,那么经过我的分析,我红色框部分是一个关键的部分,其实这段代码是一个逆序运算,下面会将我们输入的内容与放到这段寄存器中的内容进行对比,对比的结果直接影响到是跳到right还是退出程序,所以我们就需要好好看一下这段代码。这段代码的意思就是逆序,将一段内容给逆序了一下,所以这段实际上就是flag的逆序。这里我们可以看lea esi,dword ptr ss:[ebp+ecx-0x25] 这一行,这一行就是执行逆序之前的重要点,所以这个地址里存放的数据我们给取出来,然后进行逆序,得到flag。接下来我来说一下静态分析的方法。

0x03

技术图片

我知道大多数人用ida进行分析的时候,肯定第一步就喜欢用F5,这里,其实如果这里直接F5,我们会错过在动态调试中看到的逆序算法,所以这道题考察我们的是汇编功底。所以,有时候我们会被ida“欺骗”,学会变通,学会把ida当工具而不是一键F5

技术图片

这个图中我标了3个箭头,第一个箭头是说这段是关键代码,第二个箭头是说这个就是它进行逆序的算法程序,最后一个箭头是将输入值与一个值进行对比的过程。(但是这个值不是flag,因为我已经试过)

技术图片

然后我们再F5写一下,看一下主函数的执行过程

技术图片

箭头所指为对比的地方,我们双击过去看看

技术图片

它就是把我框框里的东西进行了它那个函数中的算法,所以这里,我们给它逆运算一下,下面是我编写的脚本:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
	const char* a = "xIrCj~<r|2twsv3PtIzndka";
	char flag[25] = { 0 };
	for (int i = 0; i < 24; i++)
	{
		flag[i] += (a[23 - i] ^ 0x6)-0x1;	
	}
	printf("%s", flag);
	printf("\n");
	return 0;
}

运行结果:

技术图片

得到flag。

EasyRE

标签:i++   pre   过程   代码   静态   搜索字符串   int   com   结果   

原文地址:https://www.cnblogs.com/Jleixin/p/13040238.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!