利用破解版百度广告框架去百度广告

反编译apk文件,通常是用apktool反编译apk,而后剔除com\baidu\mobads目录的.smali文件. java

再用notepad++搜索全部的.smali文件(查找>>文件查找).初步定为那些类调用了百度广告api. android

可能没有查找获得.若是查找的到则 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" />

好,就是这段代码使得广告起做用. this

因此,只须要将jar中的com.baidu.mobads.AdView.class替换掉就能够了. code

接着,打开Eclipse 新建一个项目,项目名任意. xml

接着建立一个AdView类,包名com.baidu.mobads. ip

代码以下

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.

 

不要问我是谁,咱是雷锋的同党!咱只为用户谋福利!

警告:不为用户谋福利,而利用此法为本身谋私利钱财的,后果自负!