使用工具
1、IDA32
2、AS
3、反编译工具,MT管理器
本来只写了熊猫看书,但准备发表的时候感觉只有一种软件帖子篇幅太小了,就找了另外两款没有加固的软件充数,所以一共有3款软件,分别是熊猫、纵横、番茄。MOD软件之前要先去掉自带的保护,广告的话都是常见的穿山甲、腾讯、百度等,这类的教程发太多了,可以自己找一下论坛。
禁止转载本帖内容,一些博客怎么老喜欢转我的帖子,最主要的是还分类在原创标签到处引流。 吾爱芽衣原创
一、熊猫看书9.4.1.01
跟下载评论一样,差不多是个流氓软件了。我刚安装,想点击开屏广告的跳过按钮,点几次都点不到,结果打开京东购物APP。
主要是那个按钮过小,而且太靠近顶端,容易和状态栏冲突,点错就会打开购物软件了。换了另一部手机,状态栏比较高,就容易点。
这软件我用mt管理器一键hook失败,那就不用hook了,来看一下怎么回事。
还是老生常谈的>signatures,dex内直接搜索这个代码,有很多个结果,一些广告三方sdk就不要理了。
反编译后查看AndroidManifest,入口名是android:name=”com.baidu.shucheng91.Application”,定位到结果com/baidu/shucheng91/util/g。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
package com.baidu.shucheng91.util; import android.content.Context; /* compiled from: CheckUtil */ public class g { public static byte [] a = {- 26 , - 126 , - 88 , - 27 , - 82 , - 119 , - 24 , - 93 , - 123 , - 26 , - 104 , - 81 , - 25 , - 101 , - 105 , - 25 , - 119 , - 120 , - 27 , - 70 , - 108 , - 25 , - 108 , - 88 , - 17 , - 68 , - 116 , - 24 , - 81 , - 73 , - 27 , - 82 , - 119 , - 24 , - 93 , - 123 , - 27 , - 82 , - 104 , - 26 , - 106 , - 71 , - 25 , - 119 , - 120 , - 26 , - 100 , - 84 }; public static int b = 1654413599 ; public static int a(Context context) { try { return context.getPackageManager().getPackageInfo(context.getPackageName(), 64 ).signatures[ 0 ].hashCode(); } catch (Exception e) { e.printStackTrace(); return 0 ; } } } |
其原理就是获取签名的哈希值,然后对比b,如果不一致就弹出a提示。b的值smali代码已经给出,直接写死就可以了。我本以为这样就完成了,结果安装后还是弹出盗版提示。
回到smali代码,有一句sput-object v0, Lcom/baidu/shucheng91/util/g;->a:[B,dex继续搜索Lcom/baidu/shucheng91/util/g;->a:[B,主要关注sget-object,这些成员变量都是比较好分析的。定位到com/baidu/shucheng/ui/main/MainActivity$l,然后查找是哪个地方调用了这里。
部分代码如下:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
invoke- static {v0}, Ljava/lang/Long;->parseLong(Ljava/lang/String;)J move-result-wide v0 sput-wide v0, Lcom/baidu/shucheng/ui/main/MainActivity;->K:J const -wide/ 32 v3, 0xa6d833 sub- long /2addr v0, v3 .line 40 sput-wide v0, Lcom/baidu/shucheng/ui/main/MainActivity;->K:J :cond_6 const -string v0, "classes.dex" .line 41 invoke-virtual {v6, v0}, Ljava/util/zip/ZipFile;->getEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry; move-result-object v0 .line 42 invoke-virtual {v0}, Ljava/util/zip/ZipEntry;->getCrc()J move-result-wide v0 sget-wide v3, Lcom/baidu/shucheng/ui/main/MainActivity;->K:J cmp- long v5, v0, v3 if -eqz v5, :cond_7 .line 43 new -instance v0, Landroid/os/Handler; invoke- static {}, Landroid/os/Looper;->getMainLooper()Landroid/os/Looper; move-result-object v1 invoke-direct {v0, v1}, Landroid/os/Handler;-><init>(Landroid/os/Looper;)V new -instance v1, Lcom/baidu/shucheng/ui/main/MainActivity$l; invoke-direct {v1, p0}, Lcom/baidu/shucheng/ui/main/MainActivity$l;-><init>(Lcom/baidu/shucheng/ui/main/MainActivity;)V invoke-virtual {v0, v1}, Landroid/os/Handler;->post(Ljava/lang/Runnable;)Z |
这里读取了压缩包内的classes.dex值,用来判断(cmp-long v5, v0, v3)是否被修改过。目的就是防止你hook或者修改了dex代码。所以先把第一个dex拉出来备份,用一键过签,再把第一个dex放回去,hook才会成功。原判断if-eqz,改成if-nez即可绕过检测。
二、纵横小说
直接签名后安装卡死闪退,还是直接搜索>signatures,发现是校验签名哈希值。
现在MT管理器支持查看哈希值,方便许多。直接把哈希值写死就可以解决卡屏问题了。
三、番茄小说5.3.9.32
直接重签名后提示盗版,同样hook无效。ida加载libmetasec_ml,修改如下图的跳转,BEQ改成BNE指令(静态地址227e0)。
再编写一个Java,代码可自行思考:
复制代码 隐藏代码
import android.content.Context;
import java.io.File;
public class y {
public static void a(Context context) {
File xml = new File("data/data/com.dragon.read/shared_prefs", "applog_stats.xml");
if(xml.exists()) {
xml.delete();
}
}
}
可以得到smali:
复制代码 隐藏代码
.class public Ly;
.super Ljava/lang/Object;
.source "y.java"
# direct methods
.method public constructor <init>()V
.registers 1
.prologue
.line 4
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static a(Landroid/content/Context;)V
.registers 4
.param p0, "context" # Landroid/content/Context;
.prologue
.line 7
new-instance v0, Ljava/io/File;
const-string v1, "data/data/com.dragon.read/shared_prefs"
const-string v2, "applog_stats.xml"
invoke-direct {v0, v1, v2}, Ljava/io/File;-><init>(Ljava/lang/String;Ljava/lang/String;)V
.line 8
.local v0, "xml":Ljava/io/File;
invoke-virtual {v0}, Ljava/io/File;->exists()Z
move-result v1
if-eqz v1, :cond_12
.line 9
invoke-virtual {v0}, Ljava/io/File;->delete()Z
.line 11
:cond_12
return-void
.end method
利用MT管理器快速添加到一个dex,然后在入口处(com.dragon.read.app.MainApplication)和阅读界面(com.dragon.read.reader.ReaderActivity)调用这个代码。
1
|
invoke- static {p0}, Ly;->a(Landroid/content/Context;)V |
复制代码 隐藏代码
.method public onCreate(Landroid/os/Bundle;)V
.registers 13
.prologue
invoke-static {p0}, Ly;->a(Landroid/content/Context;)V
const/4 v0, 0x1
const-string v1, "com.dragon.read.reader.ReaderActivity"
const-string v2, "onCreate"
invoke-static {v1, v2, v0}, Lcom/bytedance/apm/agent/v2/instrumentation/ActivityAgent;->onTrace(Ljava/lang/String;Ljava/lang/String;Z)V
new-array v3, v0, [Ljava/lang/Object;
复制代码 隐藏代码
.method public attachBaseContext(Landroid/content/Context;)V
.registers 4
invoke-static {p0}, Ly;->a(Landroid/content/Context;)V
const-string v0, "attachBaseContext"
const/4 v1, 0x1
invoke-static {v0, v1}, Lcom/bytedance/apm/agent/v2/instrumentation/AppAgent;->onTrace(Ljava/lang/String;Z)V
invoke-super {p0, p1}, Lcom/dragon/read/app/AbsApplication;->attachBaseContext(Landroid/content/Context;)V
const/4 p1, 0x0
invoke-static {v0, p1}, Lcom/bytedance/apm/agent/v2/instrumentation/AppAgent;->onTrace(Ljava/lang/String;Z)V
return-void
.end method
主要目的是干扰APP获取设备信息,覆盖安装后就不会提示盗版了。
下载说明: 1.特别声明:原创产品提供以上服务,破解产品仅供参考学习,不提供售后服务(均已杀毒检测),如有需求,建议购买正版!如果源码侵犯了您的利益请留言告知! 2.如果源码下载地址失效请 联系站长进行补发。 3.本站所有资源仅用于学习及研究使用,请必须在24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担。资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您权益请联系本站删除! 4.本站站内提供的所有可下载资源(软件等等)本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发);但本网站不能保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug;同时本站用户必须明白,【源码无忧】对提供下载的软件等不拥有任何权利(本站原创和特约原创作者除外),其版权归该资源的合法拥有者所有。 5.请您认真阅读上述内容,购买即以为着您同意上述内容。 原文链接:https://www.dabaiwu.top/blog/%e7%86%8a%e7%8c%ab%e7%9c%8b%e4%b9%a6-%e7%ad%89%e5%87%a0%e6%ac%be%e5%b0%8f%e8%af%b4%e8%bd%af%e4%bb%b6%e5%8e%bb%e4%bf%9d%e6%8a%a4%e6%95%99%e7%a8%8b/,转载请注明出处。