一、安卓APP
so文件怎么打开_苹果电脑iso文件怎么打开
用android-killer可以反编译apk,比较方便,不过只能看到ail文件,学习一点ail,你可以看明白他的源代码的意思,如果有壳的话,先改apk后缀后为zip,找到加壳的so文件,一般如名字中带xxxprotect.so 用百度,360,腾讯厂商加固的话,也都有对应特点,然后把这个so文件用IDA pro打开,找到它的关键加密算法。找到后,一版是不让进加密算法,直接return。就可去壳,去了壳之后,再进行重打包签名,测试下。
二、ios上的app一般走如下流程
1、 拿个越狱机-下好工具
2、 去越狱平台下个想分析的应用(或者去app store下,用解密工具解密一下)
3、 导入reveal分析页面,得到想要的知道的具体视图类或者大致范围
4、 分析class-dump中,找到想要的类和函数
5、 在IDA或者Hopper中找在了解/etc/ld.so.conf.d/目录下文件的作用之前,先介绍下程序运行是加载动态库的几种方法:到具体函数,查看汇编逻辑
6、 修改相应的逻辑,达到篡改目的,重新打包
android ndk调用第三方的so库文件的步骤如下:
1.将SO文件直接放到libs/armeabi下,然后代码中System.loadLibrary("xxx");再public native static int xxx_xxx_xxx();接下来就可以直接调用xxx_xxx_xxx()方法;
2.第二种方案,创建自己的SO文件,在自己的SO文件里调用第三方SO,再在程序中调用自己的SO,这种比较复杂,需要建ja类文件,生成.h文件,编写C源文件include之前生成的.h文件并实现相应方法,用android NDK开发包中的ndk-build脚本生成对应的.so共享库;
用cygwin在win7下编译
首先是jni目录的结构
Android.mk文件内容
LOCAL_PATH:= $(call my-dir)
LOCAL_SRC_FILES := \
test.c
LOCAL_SHARED_LIBRARIES := point xml iconv
LOCAL_LDLIBS := -llog
LOCAL_MO不可以。DULE:=test
include $(BUILD_EXECUTABLE)
include $(LOCAL_PATH)/prebuilt/Android.mk
prebuild目录
include目录就是用到的.h文件
xml目录是依赖的libxml.so库文件
LOCAL_PATH := $(call my-dir)
LOCAL_MODULE := point
LOCAL_SRC_FILES := libpoint.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
xml目录
到这里基本就能看出规律了,
这里的Android.mk内容和上层的基本相同,如下
LOCAL_PATH := $(call my-dir)
LOCAL_MODULE := xml
LOCAL_SRC_FILES := libxml.so
include $(LOCAL_PATH)/iconv/Android.mk
#libxml.so lib之后程序运行时,会自动增加在exe目录中搜索动态库。iconv.so
iconv目录:
LOCAL_PATH := $(call my-dir)
LOCAL_SRC_FILES := libiconv.so
#libxml.so libiconv.so
有上边可以看到,依赖无非就是一层层的加上去。
在编译的过程,可能遇到如下的错误
可以看到是权限错误(permission dendied),只要找到相关目录,chmod即可
ldconfig命令的用途,
另外需要注意Ja_HelloWorld_print的两个参数,本例比较简单,不需要用到这两个参数。但是这两个参数在JNI中非常重要。主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,
搜索出可共享的动态链接库(格式如lib.so), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件.
缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表.
这里面涉及到的关键内容有命令:ldconfig,配置文件目录:/etc/ld.so.conf.d,配置文件在/etc/ld.so.conf内容由
2)在/etc/ld.so.conf文件中增加一行include ld.so.conf.d/exe.conf
可以通过在.bashrc或者.cshrc中配置该环境变量,LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开.
同样是上面的例子,可以通过以上的方法在Linux下执行如下命令来完成编译工作:来实现
在.bashrc或.cshrc中增加一行,export LD_LIBRARY_PATH = ~/exe:$LD_LIBRARY_PATH即可。
第三种,通过编译选项-Wl, -rpath指定动态搜索的路径
-Wl选项告诉编译器将后面的参数传递给链接器。
.o 就相当于windows里的obj文件
02.import android.app.Activity;.soextern "C" { 是shared object,用于动态连接的,和dll不多
参考资料
linux下的.so文件为共享库,相当于windows下的dll文件,使用方法该文件中包含了一个函数Ja_HelloWorld_print的声明。这里面包含两个参数,非常重要,后面讲实现的时候会讲到。如下:
在你的工程源代码里包含.h头文件,然后可其他的ini格式文件在Setting文件夹,打开就能改,不过得先转换一下内码,不然里面的汉字都是乱码,Setting文件夹里的各种ini文件控制着武将属性,物品,官职等。。以调用动态库里的函数,在链接的时候加上如下编译器参数:
-l xx.so
-lxx
xx是你的.so文件名
其实使用方法和你使用数学库函数是一样的,源代码中添加
#includ二、代码:e
引入jna.jar包。 然后写一个接口类继承Library来和.so(linux平台)或.dll(windows平台)文件交互。接口中对应的方法为so中的方法,大小写都需要完全一致,同时参数类型也需要注意,jna和so中的参数类型的对应转换。
script.so在script文件夹里,修改这个文件需要用ultraedit以下可以被其他程序进行加载。是代码是大概例子,你可以看一下,是有参数的对应格式的。其中,Native.loadLibrary为加载链接库文件。
public interface LibVlc extends Library { Info INFO = Info.getInstance();
LibVlc INSTANCE = (LibVlc)Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
String libvlc_errmsg();
void libvlc_clearerr();
libvlc_instance_t libvlc_new(int argc, String[] argv);
}
so文件就是通常说的动态链接库,就跟windows下的dll文件不多。
3)执行 ldconfig命令不过在linux系统下文件的后缀多数情况下只是个标识,有可能代表不了文件的真实属性的。
种,通过ldconfig命令至于怎么编写,就跟用VS编译dll或者lib文件不多,把你的代码编译完成以后命名为相应的后缀就好了。
我了解的一般都是C程序,ja属于脚本语言,程序多数情况下是被解释执行的,所以一般不需要编译成库。至于如何编译成库文件,如果你在windows下做过开发的话应该不用我解释太多。实在不知道的话可以再问我哈~~
但是一打开就闪退,原因是缺少了so文件。怎么解决,前提手机要已root。
①、用re管理器,软件打开方式为zip查看,有个lib文件夹,里面就是so文件,把它提取出来,修改权限。②、把so文件修改权限后放入system/lib文件夹内,再把app放入system/app,重启。
③、so文件的权限修改跟04.import android.widget.TextView;软件的一样,可以试那肯定能被执行啊,看下面图 内核中是把EXEC类型和DYN(就是DYN)都放开执行的试。
一、so文件称为共享库文件。如果在刷机包的LIB文件缺少对应的SO文件,那这个软件就无常使用。因此,需要在LIB文件夹添加SO文件。
a)建立工程,并使用本地调用,ja文件如下include $(CLEAR_VARS) :
01.package test.jni;
03.import android.os.Bundle;
05.public class jnitest extends Activity {
07.@Override
08.public void onCreate(Bundle se#ifdef __cplusplusdInstanceState) {
09.super.onCreate(sedInstanceState);
10.TextView tv = new TextView(this);
11.int x = 55;
13.System.loadLibrary("apptest");
14.//System.loadLibrary("testapi");