[置顶] 安卓反编译smali代码注入第三方广告

最近研究了下反编译smali代码注入 实现自己的功能 

简单的注入Toast  log代码  比较简单  网上都是  但是没有找到加入第三方广告sdk的例子  下面就以hao123广告注入说下自己的经验  其实规律很简单

hao123广告 需要的代码 (此处只是为了知道哪些地方改变了)

1.AndroidManifest.xml 权限 以及活动 服务 广播

2.res-drawable-xhdpi 新加一张图片

3.res-layout 新加两个布局文件

4.res 目录下 新加个raw文件 里面包含hao123cid.ini文件

5.MainActivity追加 HaoAgent.getInstance(this).init();初始化调用代码


准备工作 新建个最简单的hello_world工程  反编译  同时 hello_world工程加入hao123广告代码  反编译  对比不同

应用市场下载个apk文件(没有混淆) 用apktool反编译


1 首先这里的清单文件追加需要的代码    <original文件夹中的清单文件无需理会>

2 original --- META-INF文件夹中通常有

CERT.RSA   CERT.SF   MANIFEST.MF三个文件


前面两个文件是安卓项目签名文件 最后那个自行百度 我就不多说了

这三个文件可以全部删除 


3.根目录 res文件夹

这里对应的文件夹追加对应的资源文件  直接拷贝即可 <如果没raw文件夹  整个文件夹拷贝即可>


重点来了 打开values文件 


在ids.xml文件中追加改变的代码

<item type="id" name="fapk_bimg_bg_background">false</item>
    <item type="id" name="fapk_img_bg_background">false</item>

在public.xml文件下追加需要的代码

此处要重点注意

如:

<public type="layout" name="activity_main" id="0x7f030000" />    
<public type="layout" name="hao123_notification_fapk_bimg_bg" id="0x7f030001" />
    <public type="layout" name="hao123_notification_fapk_img_bg" id="0x7f030002" />


代码 activity_main是都有的 下面的两个layout是需要新加的  看出变化了没  对 简单的id自增即可

如果没有的文件  比如我反编译的apk这里没有raw 但是我们又需要新追加raw 那这个id怎么办呢  

简单  你可以自己新加个Id  比如layout全是 0x7f03开头   那么0x7f04即可

这里的id很重要 必须唯一  可以理解为安卓工程中的r文件

4.返回根目录 下面需要修改smali里面的代码了

 在com里面把baidu文件夹全部拷贝过来  baidu文件夹既是hao123广告里面的jar包

5 在smali中  搜索R$layout.smali文件 即可找到项目的资源文件  一般项目的资源文件都在一起  这里需要注意根据目录区分是库文件的资源文件 还是项目本身的资源文件



找到这个资源文件 

打开追加自己的代码  比如hao123多了两个布局文件  那么我们在R$layout.smali里面 

追加这两个布局文件    注意 此处的id即为上面public.xml里面我们写入的id  id一定要一致!

依次完成其他代码的追加 比如 R$drawable.smali   R$id.smali等

同时这里需要注意一点  R.smali和R$raw.smali文件

没有R$raw.smali文件  那么直接拷贝  但是需要注意更改项目路径  同时  R.smali 追加raw引用代码

5.到这里  那么就差最后一步了   没错 即是MainActivity中的代码!

根据清单文件  查看项目启动活动 的路径  可以直接找到这个活动文件  (此处看你想把代码加在那个地方了)

找到onCreate方法   这里你可能会头大吧   看不懂这个代码啊   没关系 只要了解基础语法就行了

 

 .line 16
    invoke-static {p0}, Lcom/baidu/hao123/union/HaoAgent;->getInstance(Landroid/content/Context;)Lcom/baidu/hao123/union/HaoAgent;


    move-result-object v1


    invoke-virtual {v1}, Lcom/baidu/hao123/union/HaoAgent;->init()V


    .line 18
    const-string v1, "Hao123\u8054\u76df\u670d\u52a1\u542f\u52a8\uff01"


    const/4 v2, 0x1


    invoke-static {p0, v1, v2}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;


    move-result-object v0


我要追加的代码就是上面的了 <对比找出>  直接丢进oncreate中  同时记得  oncreate方法的第一句.locals 3 即是这个方法声明3个内存空间  p0 v0  v1 自行百度smali的基本语法


OK!成了  重新用apktool打包  APKSign重新签名 那么就可以运行了  

反编译的代码怎么整   什么规律  以后有时间研究下 

当然请尊重别人的果实 以上代码只是个人兴趣  随意而为


你可能感兴趣的:(安卓,反编译,Smali,代码注入)