0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何主动调用获取flag

Q哥学逆向 来源:Linux逆向 作者:Linux逆向 2020-10-10 09:44 次阅读

最近在看雪Android区看到九月份的一篇优秀贴, 文章从过反调试和IDA动静态调试角度解题,甚至还得解析得到RC4密钥,讲得非常细致,虽然我也是新手,但是这么去逆向,让人觉得太难懂了。

明明有强大的frida工具,可以无需过反调试,无需IDA去动静态调试,无需获取RC4密钥,直接用主动调用获取flag,何必走繁琐的路呢?

首先直接JADX打开APK,没有加壳,直接可以看到核心代码如下,用户输入直接通过JNI函数greywolf对输入字符串做检测

利用IDA打开libwolf.so,没有找到greywolf函数,所以该函数肯定是通过registerNatives注册的,于是直接用frida拿到greywolf偏移,为0X14075。

然后IDA快捷键按G,输入0X14075,直接跳转到greywolf函数(函数名称换成了bc)处,再F5查看伪代码,如下。该函数只有line15和line17两处return,先分析第二处return。

跟踪wolf_de函数,看到明显的RC4解密算法,且密钥就是unk_4E13A,所以直接调用wolf_de,传入待解密字符串,其返回值就是解密结果,我们直接利用frida去主动调用wolf_de,去解密bc函数中line16行“5B694AADB2DC559E44B84637A2D61F”得到“Password Error~”,效果如下。

所以要想验证成功,必然走到line15行的j_jk函数,继续跟踪此函数,同样手法在jk函数中line15可以解析得到正确显示,所以跟踪dc函数。

跟踪上图dc函数,一切皆从return往上跟踪,最后在ds函数中看到如下代码,该代码将输入字符与line24解密字符串比较,相等则为真。

所以直接主动调用,直接看到flag为“hello5.1”,上机验证正确。

责任编辑:YYX

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 密钥
    +关注

    关注

    1

    文章

    119

    浏览量

    19588
  • 函数
    +关注

    关注

    3

    文章

    3864

    浏览量

    61304
  • Flag
    +关注

    关注

    0

    文章

    11

    浏览量

    8090

原文标题:逆向基础题十:获取flag

文章出处:【微信号:Reverse16,微信公众号:Q哥学逆向】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    cmd_tbl_t结构体变量调用命令信息

    一个cmd_tbl_t结构体变量包含了调用一条命令的所需要的信息。 • 对于环境变量bootcmd,执行run_command(bootcmd, flag)之后,最终是将bootcmd中的参数解析
    的头像 发表于 12-04 17:37 253次阅读
    cmd_tbl_t结构体变量<b class='flag-5'>调用</b>命令信息

    调用第三方API接口会遇到哪些问题?如何解决?

    在实际工作中,我们经常需要在项目中调用第三方API接口,获取数据,或者上报数据,进行数据交换和通信。
    的头像 发表于 11-30 11:05 756次阅读
    <b class='flag-5'>调用</b>第三方API接口会遇到哪些问题?如何解决?

    如何在AOSP12中查看binder调用信息呢?

    部分APP不会使用常规的framework api调用系统的一些函数获取信息,但是如果他自己构建binder调用的信息获取,最后都会跑到这个函数中去。
    的头像 发表于 11-27 09:40 398次阅读

    shell调用java并返回执行结果

    在Shell脚本中调用Java程序并获取执行结果,可以通过以下步骤实现: 编写Java程序:首先,你需要编写一个Java程序,包含你想要执行的功能。确保你的Java程序包含一个主类(包含main方法
    的头像 发表于 11-08 10:32 529次阅读

    MethodHandle调用示例

    机制,主要是为了JVM支持动态语言。 一个MethodHandle调用示例 首先,让指北君给大家演示一下最基本的MethodHandle使用。 第一步:创建查找对象:Lookup // 获取Look
    的头像 发表于 10-13 14:17 228次阅读
    MethodHandle<b class='flag-5'>调用</b>示例

    LabVIEW命令行调用exe传入的参数如何获取

    有些场景下,我们用LabVIEW开发的应用程序,需要通过命令行来调用,并向该应用程序传递参数,那么在程序中如何才能获取这些参数呢?
    发表于 10-11 09:28 1149次阅读
    LabVIEW命令行<b class='flag-5'>调用</b>exe传入的参数如何<b class='flag-5'>获取</b>

    如何才能获取LabVIEW程序中的传递参数呢?

    有些场景下,我们用LabVIEW开发的应用程序,需要通过命令行来调用,并向该应用程序传递参数,那么在程序中如何才能获取这些参数呢?
    的头像 发表于 10-11 09:26 653次阅读
    如何才能<b class='flag-5'>获取</b>LabVIEW程序中的传递参数呢?

    super调用父类的构造方法

    我们分析这句话“父类对象的引用”,那说明我们使用的时候只能在子类中使用,既然是对象的引用,那么我们也可以用来调用成员属性以及成员方法,当然了,这里的 super 关键字还能够调用父类的构造方法。具体
    的头像 发表于 10-10 16:42 517次阅读
    super<b class='flag-5'>调用</b>父类的构造方法

    通过函数指针调用函数,需不需要加星号?

    先来说下结论,不管是获取函数地址,还是通过函数指针调用函数,两种写法都可以,就用法上来说,没有什么区别,初学者也不必过多纠结。
    的头像 发表于 09-05 17:05 685次阅读

    Linux内核中系统调用详解

    Linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用。用户可以通过系统调用命令在自己的应用程序中调用它们。从某种角度来看,系统调用和普通的函数
    发表于 08-23 10:37 615次阅读
    Linux内核中系统<b class='flag-5'>调用</b>详解

    系统调用:用户栈与内核栈的切换(上)

    当发生系统调用、产生异常,外设发生中断等事件时,会发生用户栈和内核栈之间的切换, 本文从系统调用角度分析用户栈与内核栈的切换。 系统调用的演变 x86 的系统调用经历了 int / i
    的头像 发表于 07-31 11:27 587次阅读
    系统<b class='flag-5'>调用</b>:用户栈与内核栈的切换(上)

    调用环境对话框操作

    调用环境对话框 如果已在项目环境内部打开块,将显示此对话框。 利用此对话框中的选项,能够为需要调试的块准确地指定调用环境,也就是说仅当满足设置的条件时才显示程序状态。 "块调用环境"对话框中的选项
    的头像 发表于 06-27 11:43 382次阅读
    块<b class='flag-5'>调用</b>环境对话框操作

    博途的多重背景调用

    当函数块 (FB) 调用另一个函数块时,可其实例数据存储在调用函数块的背景数据块中。这种块调用又称之为多重实例。
    的头像 发表于 06-08 15:50 2192次阅读
    博途的多重背景<b class='flag-5'>调用</b>

    C函数调用机制与栈帧原理详解

    当一个C函数被调用时,函数的参数如何传递、堆栈指针如何变化、栈帧是如何被建立以及如何被消除的,一直缺乏系统性的理解,因此决定花时间学习下函数调用时整个调用机制并总结成文,以便加深理解。本文将从汇编的角度讲解函数
    发表于 06-08 10:49 561次阅读
    C函数<b class='flag-5'>调用</b>机制与栈帧原理详解

    SCL中调用函数的示例

    在此,可插入函数 (FC) 调用和函数块 (FB) 调用。函数块可作为单实例、多重实例或参数实例进行调用
    的头像 发表于 06-06 10:18 1310次阅读