检测是不是模拟器
# direct methods
.method static constructor <clinit>()V
.locals 1
sget-object v0, Lcom/google/android/gms/ads/AdRequest;->DEVICE_ID_EMULATOR:Ljava/lang/String;
sput-object v0, Lcom/google/ads/AdRequest;->TEST_EMULATOR:Ljava/lang/String;
return-void
.end method
- 最恶心的一种嫁接方式,就是在启动页面的activity中加入代码,判断他的应用是否存在,不存在就不跳转,
.method public isMobile_lewanExist()Z
##
if-lt v1,v0, :cond_0
:goto_1
const/4 v2,0x1
return v2
##
2. 还有就是toast !7723、当乐a.d.cn
string v0,"\u78a.d.cn"
##
.show()
##
把.show()去掉就可以去除toast
3. 启动页面的修改!当乐a.d.cn、安智、拇指玩
直接就把启动页修改,执行完自己的代码,跳回原来。
origin:
<activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:name="com.icecry.launcher.GoloRunnerStart" android:screenOrientation="landscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
modify:
<activity android:name="com.muzhiwan.sdk.MzwShellActivity" android:screenOrientation="landscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN"/> 主函数
<category android:name="android.intent.category.LAUNCHER"/>启动页表示
</intent-filter>
<intent-filter>
<category android:name="android.intent.category.LEANBACK_LAUNCHER"/>随后启动
</intent-filter>
</activity>
上边application 标签下的第一个Activity就有可能是原来的启动界面、启动类
<intent-filter/>可能就是原来启动标签写的位置
4. 拇指玩的签名检验,在修改完启动页之后游戏出现闪退!Signature
先搜索Signature,
.method private static getSign(Landroid/content/Context;)I
.locals 5
.param p0, "context" # Landroid/content/Context;
.prologue
.line 12
:try_start_0
invoke-virtual {p0}, Landroid/content/Context;->getPackageManager()Landroid/content/pm/PackageManager;
move-result-object v2
.line 13
invoke-virtual {p0}, Landroid/content/Context;->getPackageName()Ljava/lang/String;
move-result-object v3
const/16 v4, 0x40
.line 12
invoke-virtual {v2, v3, v4}, Landroid/content/pm/PackageManager;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
move-result-object v1
.line 14
.local v1, "info":Landroid/content/pm/PackageInfo;
iget-object v2, v1, Landroid/content/pm/PackageInfo;->signatures:[Landroid/content/pm/Signature;
const/4 v3, 0x0
aget-object v2, v2, v3
invoke-virtual {v2}, Landroid/content/pm/Signature;->toCharsString()Ljava/lang/String;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/String;->hashCode()I
:try_end_0
.catch Ljava/lang/Throwable; {:try_start_0 .. :try_end_0} :catch_0
move-result v2
.line 18
.end local v1 # "info":Landroid/content/pm/PackageInfo;
:goto_0
return v2
.line 15
:catch_0
move-exception v0
.line 16
.local v0, "e":Ljava/lang/Throwable;
invoke-virtual {v0}, Ljava/lang/Throwable;->printStackTrace()V
.line 18
const/4 v2, -0x1
goto :goto_0
.end method
这个获取签名,然后搜索getSign,在sdk/utils/Env.smali中有俩个getSign,分别是上边那个和下边这个
.method public static checkSign(Landroid/app/Activity;)V
.locals 3
.param p0, "context" # Landroid/app/Activity;
.prologue
.line 22
invoke-static {p0}, Lcom/muzhiwan/sdk/utils/Env;->getSign(Landroid/content/Context;)I
move-result v0
.line 24
.local v0, "sign":I
const v1, 0x396f215
#if-ne v0, v1, :cond_0
.line 31
:goto_0
return-void
.line 29
:cond_0
sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream;
const-string v2, "wrong sign!"
invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
.line 30
invoke-virtual {p0}, Landroid/app/Activity;->finish()V
goto :goto_0
.end method
改掉判断 end