第八章 Android 原生程序开发与逆向分析(六)(原生 C++ 程序逆向分析 - C++ 类的逆向分析)

文章目录

C++ 类的逆向分析

  • 实例:app8.cpp
#include <iostream>
#include <stdio.h>

class Person
{
public:
    Person()
    {
        age = 31;
        printf("Person: Person() called\n");
    }
    virtual ~Person()
    {
        printf("Person: ~Person() called\n");
    }
    virtual int getAge()
    {
        return age;
    }
    virtual void setAge(int age_)
    {
        age = age_;
    }

private:
    int age;
};

class Student: public Person
{
public:
    Student()
    {
        printf("Student: Student() called\n");
    }
    virtual ~Student()
    {
        printf("Student: ~Student() called\n");
    }
    virtual int getAge()
    {
        printf("Student: ~getAge() called\n");
        return 18;
    }
};

int main(int argc, char const *argv[])
{
    Person* person = new (Student);
    person->setAge(28);
    person->getAge();
    delete (person);
    
    return 0;
}

  • app8.cpp 中有两个类,Student 继承自 Person 并覆盖了它的 getAge()。为便于逆向分析 app8,代码中没引入 STL,且在执行这两个类的构造和析构时用 printf() 打印一条语句
  • 编译并优化:
    在这里插入图片描述
  • 拖入 IDA,F5:
    在这里插入图片描述
  • 上述伪代码中没有函数名和类的符号信息,只有 sub_xxx 型的函数调用和多级指针转换的函数调用
  • 要想逆向分析这段代码,得掌握 C++ 类对象模型及 C++ 编译器的相关知识
  • 一个 C++ 类包含多个方法和字段。将类加载到内存后,用结构体表示如下:
struct xxx {
    void
参考资源链接:[Android逆向学习手册:菜鸟入门](https://wenku.csdn.net/doc/3spu67d9dd?utm_source=wenku_answer2doc_content) 对于初涉Android逆向工程的开发人员来说,熟悉开发环境的搭建和程序逆向分析的基本步骤是非常重要的。《Android逆向学习手册:菜鸟入门》正是一本适合你的入门指南。它将帮助你掌握使用Eclipse和NDK来搭建开发环境,并进行程序逆向分析。 首先,你需要在你的计算机上安装Eclipse IDE。Eclipse是一个功能强大且广泛使用的集成开发环境,非常适合Android应用的开发。为了支持Android开发,你需要安装Android Development Tools (ADT) 插件。该插件会集成Android SDK和模拟器配置到Eclipse中,使得开发和调试变得更加便捷。 接下来,配置Eclipse以支持NDK(Native Development Kit)是构建包含原生代码应用的关键步骤。NDK允许你使用C或C++编写性能关键部分的代码,这对于需要底层操作或需要最大化性能的应用来说非常有用。安装NDK之后,需要在Eclipse中安装CDT(C/C++ Development Tools)插件,并配置NDK路径。这样,你就能在Eclipse中创建和管理原生代码项目了。 配置好开发环境之后,就可以开始进行程序逆向分析了。《Android逆向学习手册:菜鸟入门》会介绍如何使用反编译工具来获取APK文件中的Smali代码,Smali是一种中间语言,用于表示Dalvik字节码。理解Smali代码对于分析和理解Android应用的运行逻辑至关重要。手册中提及的APKToolKit、ApkIde和JEB等工具都是常用的反编译工具,它们可以帮助你将APK文件反编译成易于理解的Smali代码。 在实践中,你将学习如何查看和分析Smali代码,了解应用的执行流程和逻辑。尽管手册中的教程是基于基础和入门层面,但作者也提醒读者,逆向工程是一个不断学习和实践的过程。通过编写简单的测试应用来学习Java到Smali的转换,以及进行逆向分析,你可以逐渐提高自己的逆向技能。 最后,当你完成上述步骤之后,建议继续深入学习,加深对Android逆向工程的理解。《Android逆向学习手册:菜鸟入门》虽然是一本入门手册,但它为你提供了一个良好的起点,接下来可以探索更多高级的逆向分析技术,不断扩展你的技能树。 参考资源链接:[Android逆向学习手册:菜鸟入门](https://wenku.csdn.net/doc/3spu67d9dd?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值