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

反編譯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.

 

不要問我是誰,咱是雷鋒的同黨!咱只爲用戶謀福利!

警告:不爲用戶謀福利,而利用此法爲本身謀私利錢財的,後果自負!

相關文章
相關標籤/搜索