吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5878|回复: 83
收起左侧

[其他原创] 【原创源码】教你如何给APP添加IEME权限校验

  [复制链接]
刺蝴蝶De箫启灵 发表于 2016-5-3 15:19
本帖最后由 刺蝴蝶De箫启灵 于 2017-12-27 11:54 编辑

为了避免非零基础人群感到身体不适、头晕恶心、易怒及粗口,请不要查看以下内容
                                                                          ↑请不要无视黄色提示


此贴教你如何给APP加上IEME权限,原创APP,破解APP,都可以添加,网络权限,增删可控,无需重装APP。

本帖教程分两个
一是原创app的IEME权限的添加。我会提供源码

二是别人的app,通过smali注入给它加上权限限制。 我会提供相应的smali文件 (X宝加一次权限收费90...我把我自己的代码发出来给你们用)

下面看效果图:
QQ图片20160502210509.png


==================【原创APP,加IEME校验方法,基于网络】==================
原理:加个不可关闭的ProgressDialog,然后请求一下你的权限列表,如果有权限你就把ProgressDialog关掉,没权限你就提示没权限就行了。
下面以我的代码为准,你们可以随意发挥,比如走其他协议,或者加密什么的。


首先要有个请求类,自己随意封装,也可以用AsyncHttp框架什么的,用于请求网络连接,获取IEME权限列表的类
[Java] 纯文本查看 复制代码
public class Xqlasynhttp {
public void get(final String url,final Xqlhanld my) {
new Thread() {
@Override
public void run() {
try {
HttpClient hc = new DefaultHttpClient();
HttpGet hg = new HttpGet(url);
HttpResponse response = hc.execute(hg);
if (response.getStatusLine().getStatusCode() == 200) {
Message ms = new Message();
ms.what = 0;
InputStream in = response.getEntity().getContent();
ms.obj = inputStream2String(in);
my.sendMessage(ms);
} else {
Message ms = new Message();
ms.what = 1;
InputStream in = response.getEntity().getContent();
ms.obj = inputStream2String(in);
my.sendMessage(ms);
}
} catch (Exception e) {
e.printStackTrace();
}
super.run();
}
}.start();
}
public static String inputStream2String(InputStream in) throws IOException {
StringBuffer out = new StringBuffer();
byte[] b = new byte[4096];
int n;
while ((n = in.read(b)) != -1) {
out.append(new String(b, 0, n));
}
return out.toString();
}
}


自定义hanld。
[Java] 纯文本查看 复制代码
public class Xqlhanld extends Handler {
public void sussc(String msg) {
}

public void error(String msg) {
}

@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
sussc(msg.obj.toString());
break;
case 1:
error(msg.obj.toString());
break;
default:
break;
}
super.handleMessage(msg);
}
}


Dialog类的代码,弄个不可关闭的Dialog,然后判断是否有权限。(是不是很简单? 就是这么简单。)

//这个http的txt是保存了一些有权限的IEME,这个方法也是循环判断本机IEME是否跟服务器传过来的IEME有没有在里面
你只需要在服务器上面放一个txt文件就行了,每一行代表一个IEME权限,有权限的更新时,只需要更新文本就行了。

[Java] 纯文本查看 复制代码
public class XqlDialog {

public static void Dialog(Context context,final String DEVICE_ID){
final ProgressDialog xqlDialog=new ProgressDialog(context);
//实例化
xqlDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
xqlDialog.setTitle("权限校验");
xqlDialog.setMessage("权限校验中...");
xqlDialog.setIndeterminate(false);
xqlDialog.setCancelable(false);
xqlDialog.show();
Xqlasynhttp http=new Xqlasynhttp();
http.get("http://sq.51zuosi.com/qx.txt", new Xqlhanld() {         //这个http的txt是保存了一些有权限的IEME,这个方法也是循环判断本机IEME是否跟服务器传过来的IEME有没有在里面
@Override
public void sussc(String qx) {
String[] qxs=qx.split("\n");
boolean q=true;
for (int i = 0; i < qxs.length; i++) {
if(DEVICE_ID.equals(qxs[i])){
xqlDialog.setMessage("授权成功!");
xqlDialog.dismiss();
q=false;
break;
}
}
if(q)
xqlDialog.setMessage("本机未授权,请联系箫启灵购买权限\r\n本机ID:"+DEVICE_ID);
}
});
}
}


调用方法(在你想控制的activity的onCreate方法中调用对应方法就行):
获取本机的IEME,传到我的那个类里面就OK了。
[Java] 纯文本查看 复制代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.index);

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
final String DEVICE_ID = tm.getDeviceId();
XqlDialog.Dialog(this, DEVICE_ID);
}




注意:清单文件中需要加入两个权限,一个是访问网络的,一个是读取本机IEME的
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

下面提供demo跟源码
demo:
链接: http://pan.baidu.com/s/1mixVitE 密码: ei38
源码:
链接: http://pan.baidu.com/s/1bozZigv 密码: pnjp

================他人APP,smali注入加IEME校验方法,基于网络=============
以下文字只用于技术研究跟探讨。


这个效果跟上面的效果是一样的。需要准备一个带请求的TXT连接,存入的IEME值,一行代表一个权限。
步骤
1、使用反编译工具打开apk,我这里用的是apk改之理。
2、导入相应smali文件
QQ截图20160502211825.png


QQ截图20160502212058.png


第二步,清单文件加入权限
<uses-permission android:name="android.permission.INTERNET" /> //如果有这个权限了,就不用重复添加了
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

第三步,根据配置文件,找到主activity的smali 把一下代码放入oncreate方法中即可,第一行,或者return语句前面。
        invoke-static {p0}, Lcom/xiaoqiling/XqlDialog;->Dialog(Landroid/content/Context;)V


第四步,我放入的smali文件都是自己的包名,所以你们要修改成你的那个工程文件下的包名路径。使用全局更改,可以一次改完。
XqlDialog$1.smali跟XqlDialog.smali配置了标题,提示信息,以及txt请求连接,这些你们自己改成自己想要的。

[Java] 纯文本查看 复制代码
.class public Lcom/xiaoqiling/XqlDialog;
.super Ljava/lang/Object;
.source "XqlDialog.java"


# direct methods
.method public constructor <init>()V
    .locals 0

    .prologue
    .line 11
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method

.method public static Dialog(Landroid/content/Context;)V
    .locals 6
    .param p0, "context"    # Landroid/content/Context;

    .prologue
    const/4 v5, 0x0

    .line 14
    const-string v4, "phone"

    invoke-virtual {p0, v4}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Landroid/telephony/TelephonyManager;

    .line 15
    .local v2, "tm":Landroid/telephony/TelephonyManager;
    invoke-virtual {v2}, Landroid/telephony/TelephonyManager;->getDeviceId()Ljava/lang/String;

    move-result-object v0

    .line 16
    .local v0, "DEVICE_ID":Ljava/lang/String;
    new-instance v3, Landroid/app/ProgressDialog;

    invoke-direct {v3, p0}, Landroid/app/ProgressDialog;-><init>(Landroid/content/Context;)V

    .line 18
    .local v3, "xqlDialog":Landroid/app/ProgressDialog;
    invoke-virtual {v3, v5}, Landroid/app/ProgressDialog;->setProgressStyle(I)V

    .line 19
    const-string v4, "\u6743\u9650\u6821\u9a8c"

    invoke-virtual {v3, v4}, Landroid/app/ProgressDialog;->setTitle(Ljava/lang/CharSequence;)V

    .line 20
    const-string v4, "\u6743\u9650\u6821\u9a8c\u4e2d..."

    invoke-virtual {v3, v4}, Landroid/app/ProgressDialog;->setMessage(Ljava/lang/CharSequence;)V

    .line 21
    invoke-virtual {v3, v5}, Landroid/app/ProgressDialog;->setIndeterminate(Z)V

    .line 22
    invoke-virtual {v3, v5}, Landroid/app/ProgressDialog;->setCancelable(Z)V

    .line 23
    invoke-virtual {v3}, Landroid/app/ProgressDialog;->show()V

    .line 24
    new-instance v1, Lcom/xiaoqiling/Xqlasynhttp;

    invoke-direct {v1}, Lcom/xiaoqiling/Xqlasynhttp;-><init>()V

    .line 25
    .local v1, "http":Lcom/xiaoqiling/Xqlasynhttp;
    const-string v4, "http://sq.51zuosi.com/qx.txt"

    new-instance v5, Lcom/xiaoqiling/XqlDialog$1;

    invoke-direct {v5, v0, v3}, Lcom/xiaoqiling/XqlDialog$1;-><init>(Ljava/lang/String;Landroid/app/ProgressDialog;)V

    invoke-virtual {v1, v4, v5}, Lcom/xiaoqiling/Xqlasynhttp;->get(Ljava/lang/String;Lcom/xiaoqiling/Xqlhanld;)V

    .line 43
    return-void
.end method


[Java] 纯文本查看 复制代码
.class Lcom/xiaoqiling/XqlDialog$1;
.super Lcom/xiaoqiling/Xqlhanld;
.source "XqlDialog.java"


# annotations
.annotation system Ldalvik/annotation/EnclosingMethod;
    value = Lcom/xiaoqiling/XqlDialog;->Dialog(Landroid/content/Context;)V
.end annotation

.annotation system Ldalvik/annotation/InnerClass;
    accessFlags = 0x0
    name = null
.end annotation


# instance fields
.field private final synthetic val$DEVICE_ID:Ljava/lang/String;

.field private final synthetic val$xqlDialog:Landroid/app/ProgressDialog;


# direct methods
.method constructor <init>(Ljava/lang/String;Landroid/app/ProgressDialog;)V
    .locals 0

    .prologue
    .line 1
    iput-object p1, p0, Lcom/xiaoqiling/XqlDialog$1;->val$DEVICE_ID:Ljava/lang/String;

    iput-object p2, p0, Lcom/xiaoqiling/XqlDialog$1;->val$xqlDialog:Landroid/app/ProgressDialog;

    .line 25
    invoke-direct {p0}, Lcom/xiaoqiling/Xqlhanld;-><init>()V

    return-void
.end method


# virtual methods
.method public sussc(Ljava/lang/String;)V
    .locals 6
    .param p1, "qx"    # Ljava/lang/String;

    .prologue
    .line 28
    const-string v3, "\n"

    invoke-virtual {p1, v3}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;

    move-result-object v2

    .line 29
    .local v2, "qxs":[Ljava/lang/String;
    const/4 v1, 0x1

    .line 30
    .local v1, "q":Z
    const/4 v0, 0x0

    .local v0, "i":I
    :goto_0
    array-length v3, v2

    if-lt v0, v3, :cond_1

    .line 39
    :goto_1
    if-eqz v1, :cond_0

    .line 40
    iget-object v3, p0, Lcom/xiaoqiling/XqlDialog$1;->val$xqlDialog:Landroid/app/ProgressDialog;

    new-instance v4, Ljava/lang/StringBuilder;

    const-string v5, "\u672c\u673a\u672a\u6388\u6743\uff0c\u8bf7\u8054\u7cfb\u7bab\u542f\u7075\u8d2d\u4e70\u6743\u9650\uff0c\r\n\u672c\u673aID:"

    invoke-direct {v4, v5}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    iget-object v5, p0, Lcom/xiaoqiling/XqlDialog$1;->val$DEVICE_ID:Ljava/lang/String;

    invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v4

    invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v4

    invoke-virtual {v3, v4}, Landroid/app/ProgressDialog;->setMessage(Ljava/lang/CharSequence;)V

    .line 41
    :cond_0
    return-void

    .line 31
    :cond_1
    iget-object v3, p0, Lcom/xiaoqiling/XqlDialog$1;->val$DEVICE_ID:Ljava/lang/String;

    aget-object v4, v2, v0

    invoke-virtual {v3, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v3

    if-eqz v3, :cond_2

    .line 32
    iget-object v3, p0, Lcom/xiaoqiling/XqlDialog$1;->val$xqlDialog:Landroid/app/ProgressDialog;

    const-string v4, "\u6388\u6743\u6210\u529f!"

    invoke-virtual {v3, v4}, Landroid/app/ProgressDialog;->setMessage(Ljava/lang/CharSequence;)V

    .line 33
    iget-object v3, p0, Lcom/xiaoqiling/XqlDialog$1;->val$xqlDialog:Landroid/app/ProgressDialog;

    invoke-virtual {v3}, Landroid/app/ProgressDialog;->dismiss()V

    .line 34
    const/4 v1, 0x0

    .line 35
    const/4 v3, 0x0

    sput-boolean v3, Lutil/Author;->qx:Z

    goto :goto_1

    .line 30
    :cond_2
    add-int/lit8 v0, v0, 0x1

    goto :goto_0
.end method



smali文件下载:
链接: http://pan.baidu.com/s/1ge5r29d 密码: qtek

点评

我就想知道这货能破解么。。  发表于 2016-5-4 09:37
虽然看不懂,但还是要学习  发表于 2016-5-3 19:24
注意!注意!注意!请不要非法使用哦~~~  发表于 2016-5-3 15:39

免费评分

参与人数 32威望 +1 热心值 +32 收起 理由
mgsjh + 1 大神,第二种方法能录个视频给我吗,小白
sjjyz + 1 热心回复!
秋水 + 1 好东西!
andg1110 + 1 大神求详细教程啊!小白有点糊涂
天蝎座_冷情丶 + 1 ??ш????????????
tiexie + 1 离线绑定手机的能搞吗,大哥,
嫖鸡不犯罪 + 1 小白啥都看不懂。
小XK + 1 用心讨论,共获提升!
tankxin + 1 谢谢@Thanks!
xiaoleilll + 1 谢谢@Thanks!
被强煎的蛋 + 1 支持大神啊 虽然看不懂 但是还是很不错
lindian + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zlw310282 + 1 这么棒!
chenhuanlin + 1 谢谢@Thanks!
阳光下疗心 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lies2014 + 1 谢谢@Thanks!
十月鼠 + 1 用心讨论,共获提升!
a5606495 + 1 用心讨论,共获提升!
Cizel + 1 + 1 用心讨论,共获提升!
大将军 + 1 好久不见
冰凉丶 + 1 启灵 大神叼叼叼
luckys + 1 大神 有没有详细教程 零基础 看不懂
愛媛えひめ叶 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lzz656 + 1 感谢,收藏了
xizevip + 1 谢谢@Thanks!
myouter + 1 用心讨论,共获提升!
小草哥哥 + 1 暂时用不上,帮顶
hackerxj + 1 犀利,谢谢分享
jiachengzi + 1 热心回复!
苏紫方璇 + 1 用心讨论,共获提升!
z120813918 + 1 用心讨论,共获提升!
pxhb + 1 非常好,感谢分享了

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 刺蝴蝶De箫启灵 发表于 2016-5-18 18:37
少年梦她暖半夏 发表于 2016-5-18 18:20
第一图是我在模拟器上安装时的安卓日志输出。界面看到的就是已停止运行

修改了一点,你用这几个文件试试
链接: http://pan.baidu.com/s/1ge5r29d 密码: qtek
 楼主| 刺蝴蝶De箫启灵 发表于 2016-5-21 11:28
第二梦 发表于 2016-5-3 15:23
冰楓丶殘瀷 发表于 2016-5-3 15:25
难得前排
ppszxc 发表于 2016-5-3 15:25
不错,可以加个权限,不知道大文件会不会有影响,下载来看看源码
pxhb 发表于 2016-5-3 15:26
这个估计很多人都期待已久了
Vvvvvoid 发表于 2016-5-3 15:27
前排
感谢分享
我是萌萌哒提莫 发表于 2016-5-3 15:28
这个吊这个吊.but我是java不会安卓
admib木木 发表于 2016-5-3 15:36
很不错看看看
方妍心 发表于 2016-5-3 15:38
像加个IEME权限校验挺不错的,可以用于某些APP上。注意!注意!注意!请不要非法使用
myqqq 发表于 2016-5-3 15:39
萧大侠又出精品了         
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-30 17:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表