标签:
反编译apk文件,一般是用apktool反编译apk,然后剔除com\baidu\mobads目录的.smali文件.
再用notepad++搜索所有的.smali文件(查找>>文件查找).初步定为那些类调用了百度广告api.
可能没有查找得到.如果查找的到则
对dex文件经行dex2jar,使用JDGUI打开jar文件,看看刚才定位的那些类怎么调用百度广告的什么api.
我反编译了一个apk,在jar中没有找到调用广告的api的代码.看来只用在layout布局文件查找.
其中一个布局文件发现了这样的一段代码
<com.baidu.mobads.AdView android:id="@id/ads" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentBottom="true" baiduadsdk:adSize="0" baiduadsdk:adId="1003fbb5" />
好,就是这段代码使得广告起作用.
所以,只需要将jar中的com.baidu.mobads.AdView.class替换掉就可以了.
接着,打开Eclipse 新建一个项目,项目名任意.
接着创建一个AdView类,包名com.baidu.mobads.
代码如下
package com.baidu.mobads; import android.content.Context; import android.util.AttributeSet; import android.widget.RelativeLayout; public final class AdView extends RelativeLayout { public AdView(Context paramContext) { this(paramContext, true, AdSize.Banner, ""); } public AdView(Context paramContext, AttributeSet paramAttributeSet) { this(paramContext, paramAttributeSet, true, AdSize.Banner, ""); } public AdView(Context paramContext, AttributeSet paramAttributeSet, boolean paramBoolean, AdSize paramAdSize, String paramString) { super(paramContext, paramAttributeSet); } public AdView(Context paramContext, AdSize paramAdSize, String paramString) { this(paramContext, true, paramAdSize, paramString); } AdView(Context paramContext, boolean paramBoolean, AdSize paramAdSize, String paramString) { this(paramContext, null, paramBoolean, paramAdSize, paramString); } }
当你粘贴着代码进去的时候,发现了很多错误.别急.
Context,AttributeSet, RelativeLayout 这些出现了错误吧,关键没有import吧?
要不要复制个android.jar到这项目?不用.因为决定一个类的是包名和类名.
那就创建一个Context类 ,包名android.content.代码如下
package android.content; public class Context { }
同样再创建一个AttributeSet, 包名android.util.代码如下
package android.util; public class AttributeSet { }
同样再创建一个AttributeSet, 包名android.util.代码如下
package android.widget; import android.content.Context; import android.util.AttributeSet; public class RelativeLayout { public RelativeLayout(Context paramContext, AttributeSet paramAttributeSet) { // TODO Auto-generated constructor stub } }
到了这里还有一个地方有问题.AdSize!!!
在com.baidu.mobads包下创建一个枚举
package com.baidu.mobads; public enum AdSize { Banner }
好了,一切错误消失.有人会问,上面那几个类怎么都不写实现?
首先,没有代码调用AdView的方法吧,那就不写AdView的方法呗,如果有调用就直接写这个方法,但不用写里面的方法体.有return的要return 一个必要的值,这个值得慢慢斟酌.
在写Context类的使用,AdView也没有调用到Context的方法吧.那也不写里面的方法了.
接着随便创建一个类,添加个空的main方法.
点击run,com.baidu.mobads.AdView.class 就出来了.
打开该项目的目录,找到bin目录.找到AdView.class
找到刚才反编译出来的jar文件,用winrar之类工具打开,
删除com/baidu/mobads下的所有文件
AdView.class放在jar压缩包的com/baidu/mobads目录下.直接拖进去就行了.
然后使用jar2dex转换回dex ,替换掉原来apk的dex文件.重新签名.ok.
好神奇么?其实java不但代码可以复制粘贴,连编译出来的.class文件也可以随便复制粘贴删除.
只要保证必要的框架完整就可以了.想不被破解都难呀.
对于其他平台的广告同样适用,如谷歌广告.
如果再狠一点的话,把整个百度广告的api都撸一遍.想破解百度广告的话,dex2jar.
删掉百度的,将自己的山寨框架替换进去.再jar2dex. 再替换掉原来的dex,重新签名OK.
不要问我是谁,咱是雷锋的同党!咱只为用户谋福利!
警告:不为用户谋福利,而利用此法为自己谋私利钱财的,后果自负!
标签:
原文地址:http://my.oschina.net/u/256033/blog/365698