使用免费工具进行逆向和利用:第21部分

admin 2022年4月15日10:42:15使用免费工具进行逆向和利用:第21部分已关闭评论30 views字数 4207阅读14分1秒阅读模式

原作者:Ricardo Narvaja

翻译作者:梦幻的彼岸

更新日期:2022年1月21日


我们继续讨论结构,现在我们将看到如何用Radare处理它们。

在前面的第20部分,我们看到了IDA FREE的结构练习

使用结构练习

password =a

https://drive.google.com/file/d/1i_PKAY5ustTHjPdoM75ffwfCmXH9cDb9/view?usp=sharing

它附有自己的源代码。

使用免费工具进行逆向和利用:第21部分

我们在可执行文件和符号所在的文件夹中打开Windows控制台,并将可执行文件上传到radare 2。(请记住,请始终如一地按我们在前面部分中所述下载最新版本。)

https://ci.appveyor.com/project/radareorg/radare2

并寻找绿色的最新BUILD,进入ARTIFACTS,下载包含最新编译的可执行文件的压缩包。

使用免费工具进行逆向和利用:第21部分

使用免费工具进行逆向和利用:第21部分

我们寻找可执行文件并加载它。

使用免费工具进行逆向和利用:第21部分

我们将加载符号并分析

idp ConsoleApplication10.pdb

aaa

使用免费工具进行逆向和利用:第21部分

我们正在寻找main

afl~main

使用免费工具进行逆向和利用:第21部分

s main

pdf

使用免费工具进行逆向和利用:第21部分

我们已经看到了如何在经典视图中使用radare,使用CUTTER,以及VISUAL MODE和VISUAL MODE PANELS选项,我认为对我来说最舒服的是没有面板的VISUAL MODE,在本教程中我们将使用该模式,只用V输入,如果我们必须使用任何radare命令,则用冒号": "输入。

我们可以在没有面板的情况下,用V切换到视觉模式。

使用免费工具进行逆向和利用:第21部分

我们首先看到它向我们显示十六进制显示,在不同视图之间按“p”,直到我们到达反汇编列表。

一旦我进入反汇编列表,就在这里,如果我按下空格键,我会看到函数的图表。

使用免费工具进行逆向和利用:第21部分

使用免费工具进行逆向和利用:第21部分

这在图形模式下很好,使用p可以更改显示模式,其中有几个不同的模式。

好吧,现在我们要加载我们没有的结构,我们可以列出你接受的类型与ts

使用免费工具进行逆向和利用:第21部分

使用免费工具进行逆向和利用:第21部分

当我用to文件名添加该文件时,我创建了一个archivo. h文件,其中包含我要添加的结构

to pepe.h

有时它会给我一个错误,因为我没有使用radare接受的类型,所以我正在适应它并传递错误直到它接受它。

使用免费工具进行逆向和利用:第21部分

使用免费工具进行逆向和利用:第21部分

在那里我添加它,我将更改变量 s1 的类型,我们在之前的反转中看到的类型为 My_struct

使用免费工具进行逆向和利用:第21部分

afvt s1 My_struct

使用免费工具进行逆向和利用:第21部分

我们看到他在那里正确地分配了结构的字段。

如果我们不在CURSOR模式(用C进入和退出),我们按/键来突出一个变量或我们想要的东西。

使用免费工具进行逆向和利用:第21部分

用C进入光标模式,用方向键向下滚动到要看的功能,我们用ENTER看的CALL。

使用免费工具进行逆向和利用:第21部分

我们将把当前函数重新命名为

afn My_struct::My_struct

但在视觉模式下,你也可以直接按d,然后从选项中选择r,并输入新的名字。

使用免费工具进行逆向和利用:第21部分

使用免费工具进行逆向和利用:第21部分

使用免费工具进行逆向和利用:第21部分

而变量也可以通过将光标移至该行,按d再按n来重新命名。

使用免费工具进行逆向和利用:第21部分

使用免费工具进行逆向和利用:第21部分

使用免费工具进行逆向和利用:第21部分

现在我们需要改变类型,我找不到如何在视觉模式下直接做到这一点,所以我们输入:

afvt p_My_struct * My_struct

使用免费工具进行逆向和利用:第21部分

使用免费工具进行逆向和利用:第21部分

与IDA命令T相当的是ahtsoffset,用来显示例如偏移量为4的结构列表,我们从那里选择我们要分配的结构。

ahts 4

使用免费工具进行逆向和利用:第21部分

我过滤了它,因为如果没有得到很多结果,那么偏移4的My_struct字段将显示为cookie2

aht My_struct.cookie2 @ 0x0040100a

使用免费工具进行逆向和利用:第21部分

这样,我们就可以指定结构的所有偏移。

:> ahts 8

使用免费工具进行逆向和利用:第21部分

:> aht My_struct.cookie @ 0x00401014

使用免费工具进行逆向和利用:第21部分

我看到0x48没有为我列出,有一个我已经报告的错误。

使用免费工具进行逆向和利用:第21部分

所以我提出了一个issues

https://github.com/radareorg/radare2/issues/17884

使用免费工具进行逆向和利用:第21部分

您也可以使用单行命令输入结构,前面有TD命令,并用引号括起来。

"td struct My_struct {void *buf2; int cookie2; int cookie; char buf[50];char * p_size; int *p_cookie; char size; int leidos; int maxsize; void *foo2; void *f1;}"

我们看到,它接受了,尽管错误也在那里。

使用免费工具进行逆向和利用:第21部分

以这种形式使用的tk命令

tk~My_struct

它允许我们看到内部结构,它是如何被解析的,并看到它是正确的,问题是它没有让我们分配它。

使用免费工具进行逆向和利用:第21部分

这意味着字段buf是char类型,位于偏移量12,其长度为50个元素或50个字符,所以是可以的,所以在他们修复这个错误之前,我们可以继续使用这个列表,因为它提供了每个字段的正确名称、偏移量和大小。

去掉说我们不关心的目标的那几行,它看起来是这样的

My_struct=struct
struct.My_struct.buf=char,12,50
struct.My_struct.buf2=void ,0,0
struct.My_struct.cookie=int32_t,8,0
struct.My_struct.cookie2=int32_t,4,0
struct.My_struct.f1=void
,88,0
struct.My_struct.foo2=void ,84,0
struct.My_struct.leidos=int32_t,76,0
struct.My_struct.maxsize=int32_t,80,0
struct.My_struct.p_cookie=int32_t
,68,0
struct.My_struct.p_size=char *,64,0
struct.My_struct.size=char,72,0

使用免费工具进行逆向和利用:第21部分

所以要映射的字段是0x48、0x4c和0x50,传递到十进制72、76、80。

struct.My_struct.size=char,72,0
struct.My_struct.leidos=int32_t,76,0
struct.My_struct.maxsize=int32_t,80,0

好吧,因为我想完成教程,而且我们已经看到了它应该工作的方式,实际上只有ahts偏移量应该列出该偏移量的合格结构和字段的名称,而aht是分配的,当他们修复这个错误时,我将把我不解析的字段的名称作为注释加入。

也就是说,要分配,如果没有错误,则在0x40101e字段中,您应该执行以下操作

使用免费工具进行逆向和利用:第21部分

这里应该列出My_struct.size这个字段,它位于偏移量72。。

然后再分配

aht My_struct.size @ 0x0040101e

我们将在这一行加上一个注释,只需将aht改为CCu,这是添加注释的命令。

CCu My_struct.size @ 0x40101e

使用免费工具进行逆向和利用:第21部分

好吧,至少我们看到了哪个领域,我们对剩下的两个领域也做了同样的事情,这是正确的方式。

使用免费工具进行逆向和利用:第21部分

使用免费工具进行逆向和利用:第21部分

添加注释

CCu My_struct.leidos @ 0x401025

使用免费工具进行逆向和利用:第21部分

CCu My_struct.maxsize @ 0x40102f

好吧,正如我们之前所做的那样,我们已经知道它在那里初始化这些字段,我们在这里也看到它是My_struct的构造函数。

唯一重要的值是My_struct.maxsize,它将初始化为0x32。

我们回到main,回到了我们进入CALL的地方。

使用免费工具进行逆向和利用:第21部分

有时,我会将其保存到项目中,有时我会将其重命名为不同的状态以进行恢复

Ps xyz

使用免费工具进行逆向和利用:第21部分

使用免费工具进行逆向和利用:第21部分

每隔一段时间,我都会在项目中保存,有时我会改变名称,以便有几种不同的状态可以恢复。

如果我们用C退出光标模式,用p切换显示,直到我们看到十六进制转储,在那里我们按G,转到0x414000,看到它是LoadLibrary的IAT条目。

使用免费工具进行逆向和利用:第21部分

我确认,这是IAT的条目,其中包括以下内容

ii~..

使用免费工具进行逆向和利用:第21部分

如果要搜索单个条目,请进行筛选。

使用免费工具进行逆向和利用:第21部分

在使用结构创建的文件中重命名是重命名其字段的方法之一。

使用免费工具进行逆向和利用:第21部分

然后我对pepe.h进行了修改,并且名字已经改变。

使用免费工具进行逆向和利用:第21部分

你也可以用更改后的名称运行td命令

"td struct My_struct {void *buf2; int cookie2; int cookie; char buf[50];char * p_size; int *p_cookie; char size; int leidos; int maxsize; void * __LoadLibr ; void *f1;}"

让我们试试,看看是否又有变化。

使用免费工具进行逆向和利用:第21部分

是的,再次改变。

使用免费工具进行逆向和利用:第21部分

使用免费工具进行逆向和利用:第21部分

我们看到它和我们之前看到的部分完全一样,有一个调用fopen()来打开fichero.dat文件,如果它能打开它,它从文件中读取三次cookie、cookie2和size的值。

使用免费工具进行逆向和利用:第21部分

让我们去那里。

使用免费工具进行逆向和利用:第21部分

我们看到,它读取了第9个字节,也就是size,并与maxsize(0x32)进行比较,如果小于或等于,它就继续,但由于它认为符号是那个负字节的值,所以在比较中,它最终也是负的,并避免了我们去carajo,嘿嘿,并将导致后来的溢出。

使用免费工具进行逆向和利用:第21部分

我们到了CALL检查的地方,我们已经看到它是如何传递一个指向结构My_struct的指针作为参数的,我们用ENTER进入。

使用免费工具进行逆向和利用:第21部分

我们将参数类型更改为My_struct * con

afvt arg_8h * My_struct @0x401040

就在这里

使用免费工具进行逆向和利用:第21部分

通过把光标放在这一行,按d然后按n,我就可以重命名这个变量。

使用免费工具进行逆向和利用:第21部分

我们注释那些不适合我们的领域

struct.My_struct.p_cookie=int32_t *,68,0

CCu My_struct.p_cookie @ 0x401046

使用免费工具进行逆向和利用:第21部分

偏移量为4的字段将使用它。

使用免费工具进行逆向和利用:第21部分

aht My_struct.cookie2 @ 0x40104e

使用免费工具进行逆向和利用:第21部分

正如我们已经看到的,我读取了作为cookie的p_cookie内容,如果它不等于0x58552433,则将其添加到cookie2中,跳过并且不加载pepe.dll。

使用免费工具进行逆向和利用:第21部分

0x54 es 84 decimal.

struct.My_struct.foo2=void *,84,0

我们已将其重命名为__Loadlibr

使用免费工具进行逆向和利用:第21部分

我也可以把注释放在它上面,直到错误被修复。

CCu My_struct.__LoadLibr @ 0x401061

使用免费工具进行逆向和利用:第21部分

如果总和正确的话,会有跳转和加载pepe.dll的过程。

在这里,函数已经完成,让我们用u回到main。

其余的已经在上一篇教程中解释过了,我们不再详细说明了。有一个固定的malloc和一个大小为负的Fread会溢出堆栈,还有一个memcpy会在溢出之后发生。

使用免费工具进行逆向和利用:第21部分

在这个课件中,重要的是测试radare中结构的界面,并学习如何使用它,尽管有这个错误,我想我们已经能够做到了,我们知道当这个错误被修复后,我们将能够处理它们。

截至第22部分

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月15日10:42:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   使用免费工具进行逆向和利用:第21部分https://cn-sec.com/archives/913074.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.