为了对调用的SO库进行调试,在编译SO库时也要如上图所示加入调试信息。首先   g++ -c -fPIC -g -o Ccalculate.o Ccalculate.cpp 是将Ccalculate.cpp生成.o文件,为生成SO文件准备。 g++ -shared -g -o libCompute.so Ccalculate.o 将点o文件生存SO共享库。注意这里在编译时都加入了-g选项
原创 2014-03-23 22:03:24
10000+阅读
0X00 前言 为了增加APK文件的破解难度,很多比较重要的功能都是通过native实现,与反编译不同的是,java的伪代码可以很清楚的得到程序的逻辑关系,但是so文件反编译得到的是汇编代码,使用ida这样的神器可以得到c的伪代码。使用ida实现so的动态调试,可以在关键地方下断点,对于一些变换,比如有的时候输入的内容与经过一些列的变换后的结果比较,这个时候我们不需要关心中间的变换过程,在动态调
文章目录一、IDA server安装1、把本地IDA server文件推送进手机目录2、进入手机shell3、修改权限运行server二、了解反调试策略三、反调试处理方法1、给app加上可调式权限2、检查flags中是否有允许debug项3、以调试模式启动APP APP此时会挂起4、IDA设置5、点击运行按钮6、在设备里查看APP的进程ID7、使用JDB命令让APP 恢复运行8、定位反调试代码9
序言:该篇文章记录Android studio怎么使用NDK制作so库过程最开始用Android Studio 3点几的版本和2020年3月份最新版本的Android studio,配置的时候老是出一些无法解决的错误,搞的心态爆炸。最终选择Android 4.0版本 SDK Platforms:Android 6.0(API 23) SDK Build-Tools: 27.0.3 NDK 版本:2
转载 2023-07-03 18:10:44
329阅读
Android so调试-你需要的从零开始前言最新公司项目需要开发一个人脸融合的demo,C++部分已经由另外团队开发完成,需要跟Android进行对接。但是在so库编译完成之后,发现闪退,logcat看不到任何信息, 只能学习一下如何对so库进行调试,还是有点门槛的,再此根据实践经验理清一下思路和结果。先说一个概念:so库的调试不是像java代码一样使用AS直接在界面里可以调试的,我们使用的
转载 2023-11-01 10:50:03
163阅读
来来了解一下JNI吧,也许工作中并不一定用得着,但是也得知道一下大概内容呀。总结安卓中关于JNI的基础知识,有以下三个部分。(第一部分)A) 创建一个类(HelloWorld.java)或者在原来的类com.example.hellojni.HelloJNI中声明本地方法。(1)使用关键字native声明本地方法,表明这两个函数需要通过本地代码C/C++实现。public native
转载 2024-10-08 17:33:48
42阅读
有时候,我们需要在APK启动时就附加上进程,等程序完全运行后再附加的方法显然时机已经晚了!比如想要调试SO库的JNI_Onload函数,很多时候需要在程序启动的时候就附加并且调试! 方法一、附加断点法(先附加再下断点)优点:速度快缺点:IDA v7.2 断点在Jni_Onload后F5无法查看伪代码,IDA6.8可以,原因未知!1.首先需要给AndroidManifest.xml设置an
转载 2023-07-03 20:21:44
504阅读
  最近使用WTP的Server功能很不爽,连tomcat服务器时java类中的任何改动都要重启服务器,一怒之下就改用JPDA了,以下是一些总结。  什么是JPDA  Java Platform Debugger Architecture(JPDA:Java平台调试架构) 由Java虚拟机后端和调试平台前端组成  1.Java虚拟机提供了Java调试的功能  2.调试平台通过调试交互协议向Java
1. 需求开发java程序,在linux环境下,执行C++编程并编译的.so文件2. 下载JNA包链接:https://pan.baidu.com/s/1YbbS0wqyTjR4ZB4YkoFjKg 提取码:rh8g3. 写c程序写一个简单的加1运算程序#include<stdio.h> int add(int a); int add(int a) { int c = a
# Android 13 调试so文件教程 ## 整体流程 为了调试 Android 13 上的so文件,我们需要使用 Android Studio 或其他适合的开发环境。下面是调试so文件的详细步骤: ```mermaid erDiagram 开始 --> 下载NDK 下载NDK --> 配置NDK路径 配置NDK路径 --> 编写C/C++代码 编写C/C
原创 2024-03-30 03:47:59
58阅读
本篇介绍使用 IDA 可以单步调试 so,即使没有源代码也没关系,这样就可以逆向目标应用的so,分析内部逻辑,本篇就介绍下如何操作。ida debug so首先得准备一个android app,带jni的。我这边用了一个加法的例子,jni 代码如下:extern "C" JNIEXPORT jint JNICALL Java_com_example_idadebugdemo_MainActivit
调试定义####调试(DEBUG):调试是一种修正程序逻辑错误有效手段,是每一个程序不可或缺的步骤,可以说,不懂调试的程序员不是合格的程序员。我将调试分成三种方法:1.Log调试(1)编写调试工具类:不建议使用System.out.print()方法进行打印,开发往往采用Log来打印进行调试。编写步骤:1.构造构造器:首先使该类构造器私有化且实例时抛出不支持操作异常,即不能实例化,毕竟是个常用的工
转载 2023-09-05 19:10:36
123阅读
     今天已是国庆的第五天,白天去武馆训练过后,晚上回来品一杯西湖龙井,更一篇博客,一来帮助需要之人,二来加深自己的理解。下面就说关于在IDA中Android so的动态调试的问题以及在so的三个层次下断点的操作。问题篇:1.动态调试的作用以及与我们常说的脱壳区别之处?2.IDA的下断点调试的原理?3.有无反调试的步骤区别?以及原理?4.反调试与反附加的区别?5.
转载 2024-08-14 13:43:10
52阅读
调试信息的生成进行gdb调试时最重要的是要保存调试信息,.c与.cpp文件编译之后可生成.o、.a、.so以及可执行文件等等。如果依赖文件中存在.c或.cpp文件,编译时加上-g选项,那么就可以用gdb调试目标文件了。值得注意的是:如果将.c或.cpp编译(加上了-g)成.o文件,再将这些.o文件编译(没有用到-g)成.so,虽然编译成.so时没有用到-g,但.so文件中仍然保存了调试信息,仍可用
1. 背景年底了,在进行技术梳理,发现对于动态调试so方面还不太会,每年都说要学习,结果两年了还没学会,近期也是进行了补课,做一个笔记记录一下。2. 工具准备2.1 IDA客户端本次使用版本是:IDA_Pro_v7.5_Portable2.2 一台Root手机Android版本:4.4.2手机系统:aosp_mako-userdebug 4.4.2 KK2.3 ApkToolBox_V1.6.4主
@目录使用断言断言的概念启用和禁用断言日志基本曰志高级曰志日志记录说明调试技巧使用断言断言(Assertion)是一种调试程序的方式。在Java中,使用assert关键字来实现断言。断言的概念假设确信某个属性符合要求, 并且代码的执行依赖于这个属性。例如, 需要计算:double y = Math.sqrt(x);确信,这里的 X 是一个非负数值。原因是:X 是另外一个计算的结果,而这个结果不可能
转载 2024-02-06 22:08:19
29阅读
首先我们如果想要在调试so的初始化JNI_OnLoad的函数里面下断点,去测试是否有反调试等操作,首先应该以启动调试模式去操作。第一步:首先以debug模式去启动调试的app程序。命令为: adb shell am start -D -n 包名/.activity名字以debug模式启动后,打开ddms工具,查看下是否有小红蜘蛛出现了,如果出现了则说明关联上了。第二步:启动android_ser
转载 2023-10-30 18:35:26
8阅读
Linux中的so文件(Shared Object)是共享库文件,它包含了可以被其他程序调用的函数和变量。在Linux系统中,so文件的使用非常普遍,特别是在软件开发中。这些so文件可以被动态链接到可执行文件中,提供程序所需的功能。 在Linux系统中,常常会出现一个so文件调用另一个so文件的情况。这种情况通常发生在一个so文件依赖另一个so文件提供的功能或者库。这种依赖关系是非常常见的,尤其
原创 2024-03-15 11:07:55
557阅读
Linux操作系统由于其开源的特性,让许多软件工程师和开发者热爱这个操作系统。其中的一个重要组成部分就是Linux内核,它由Linus Torvalds在1991年首次发布。Linux内核实现了POSIX标准和UNIX系统调用接口,使其可以运行大多数UNIX应用程序和工具。 在Linux系统中,有不同的发行版,比如Ubuntu、Debian、CentOS等。而在这些众多的发行版中,有一个备受关注
原创 2024-04-07 10:27:34
58阅读
Linux系统调用动态链接库(so)是开发中常用的一种技术手段。Linux系统下,动态链接库(so)是一种可共享的代码库,能够被多个程序引用和加载,从而减少了不同程序之间重复代码的存储和加载,提高了代码的复用率和执行效率。 在Linux系统中,动态链接库通常以.so文件的形式存在。要让程序能够调用这些动态链接库,需要使用系统调用。系统调用是操作系统提供给应用程序的接口,用于访问操作系统的功能和服
原创 2024-03-06 11:01:46
263阅读
  • 1
  • 2
  • 3
  • 4
  • 5