0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

IDA server集成以及App控制启动、停止和配置端口介绍

哆啦安全 来源:卓码星球 2023-11-15 09:13 次阅读

主要内容:

ida server集成到手机系统

adbd进程中添加启动、停止ida server的逻辑代码

开发ida server控制App实现控制ida server停止、启动、端口修改

1.ida server内置

1.1 ida下载

1.2 内置ida中的android_server到手机系统

将下载好的ida工具包解压之后,在目录dbgsrv下面存放了android_server程序。目前高版本的ida提供了armarm64平台的android_server。需要根据手机平台选择对应的版本。由于个人手机arm64的版本,所以选择arm64的程序android_server64

1.2.1 源码中构建myandroidserverarm64模块

在源码中创建目录"frameworks/base/cmds/mycmds/idaandroidserver"用来存放ida server模块。在idaandroidserver目录中,将android_server64可执行程序拷贝到该目录下面,并重命名为"myandroidserverarm64",然后在该目录下面创建Android.mk文件配置myandroidserverarm64模块的编译规则。Android.mk文件内容如下:

wKgZomVUG4yALbSEAABZWdN8iNw852.jpg

1.2.2 将myandroidserverarm64模块加入源码编译链中

在源码路径"buildmake argetproductase_system.mk"中将模块"myandroidserverarm64"添加到模块编译链中。如下参考:

wKgaomVUG5-ABz1MAAA-r4BO0FU012.jpg

2.adbd进程中编写控制myandroidserverarm64逻辑代码

由于ida server启动和frida server相似。所以可以将frida server控制的代码拷贝一份修改一下就可以使用。以下是参考代码:

//判断ida server是否正在运行
static int is_ida_server_running() {

int ret=-1;
char buf[256]={0};
FILE * fp=NULL;
if((fp=popen("ps -A","r"))==NULL)
{
MYLOGD("popen error in is_ida_server_running");
return ret;
}

while(fgets (buf,255, fp)!=NULL) {
if(strstr(buf,"myandroidserverarm64")!=NULL)
{
ret=0;
break;
}
}
pclose(fp);
return ret;
}

//发送ida server运行状态通知App
static void broadcast_ida_server_status(int status,const char * portstr)
{
//am broadcast -a com.android.myaction.IDA_SERVER_STATUS --es isRunning 0
char cmd_buf[128]={0};
sprintf(cmd_buf,"am broadcast -a com.android.myaction.IDA_SERVER_STATUS --es isRunning %d --es port %s",status,portstr);
system(cmd_buf);
MYLOGD("broadcast_ida_server_status success,status:%d current_port:%s",status,portstr);
}

//控制ida server运行、停止的工作线程
void *ida_server_work_thread(void *m)
{
MYLOGD("ida_server_work_thread start");

while(1>0)
{
std::string prop = android::base::GetProperty("sys.boot_completed", "");
std::string myfrd=android::base::GetProperty("xro.start.myidaserver","");
std::string port_str=android::base::GetProperty("xro.start.myidaserver.port","23946");
bool boot_ok = (prop == "1");
MYLOGD("ida_server_work_thread sys.boot_completed:%s",prop.c_str());
if(boot_ok)
{
int ida_server_status=is_ida_server_running();

broadcast_ida_server_status(ida_server_status,port_str.c_str());
MYLOGD("ida_server_work_thread==>%d",ida_server_status);
if(myfrd == "1")
{

MYLOGD("ida_server_work_threadstart to launch myandroidserverarm64");
char cmd_buf[128]={0};
sprintf(cmd_buf,"killall myandroidserverarm64\r\nsleep 1\r\nmyandroidserverarm64 -p %s &",port_str.c_str());
system(cmd_buf);
MYLOGD("ida_server_work_thread start myandroidserverarm64 finish ");
android::base::SetProperty("xro.start.myidaserver","3");

}else if(myfrd=="0"){
MYLOGD("ida_server_work_thread start to stop myandroidserverarm64");
char cmd_buf[128]={0};
sprintf(cmd_buf,"killall myandroidserverarm64");
if(ida_server_status>=0)
{
system(cmd_buf);
}
MYLOGD("ida_server_work_thread stop myandroidserverarm64 finish ");

}else if(myfrd=="3"){
if(ida_server_status<0)
{

//说明adbd 第一次启动,并且状态属性为3说明adbd被重启了,需要重新启动ida server
//测试过程中发现adbd挂了 ida server也会被杀掉
MYLOGD("adbd restart,start to launch myfridaserverarm64");
char cmd_buf[128]={0};
sprintf(cmd_buf,"killall myandroidserverarm64\r\nsleep 1\r\nmyandroidserverarm64 -p %s &",port_str.c_str());
system(cmd_buf);
MYLOGD("ida_server_work_thread adbd restart,start myandroidserverarm64 finish ");
//android::base::SetProperty("xro.start.myfrd","3");
}
MYLOGD("ida_server_work_thread myandroidserverarm64 is running");
}else{

}
}else{
//LOG(DEBUG) << "sys.boot_completed:"< }
sleep(1);
}
return NULL;
}

//启动ida server
static void start_ida_server()
{

MYLOGD("start_ida_server start ");
pthread_t thread_id;
int i = 9;
pthread_create(&thread_id, NULL, &ida_server_work_thread, (void*)&i);
MYLOGD("start_ida_server thread is created!");

}

3.开发App控制ida server启动、停止和配置端口

由于ida server配置和frida server配置很相似,可以参考控制frida server的配置页面写一个ida server配置的页面。以下是部分核心参考关键代码:

/广播监听状态
BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String isRunning = intent.getStringExtra("isRunning");
String port = intent.getStringExtra("port");
if (isRunning.equals("0")) {
textViewShowRunningStatus.setText("正在运行");
} else {
textViewShowRunningStatus.setText("未运行");
}

textViewIdaServerPort.setText(port);
}
};

//各种功能按钮点击事件
class MyClick implements View.OnClickListener {
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.buttonStartIdaServer: {
//启动 ida server
String port = editTextInputIdaServerPort.getText() + "";
port = port.trim();
if (port.equals("")) {
Toast.makeText(mContext, "当前未配置端口", Toast.LENGTH_LONG).show();
return;
}
try {
int myport = Integer.parseInt(port);
if (myport <= 1024 || myport > 65535) {
Toast.makeText(mContext, "配置端口错误,端口范围1024~65535", Toast.LENGTH_LONG).show();
return;
}
} catch (Exception eeee) {
Toast.makeText(mContext, "配置端口错误:" + eeee.toString(), Toast.LENGTH_LONG).show();
return;
}
String getVal = get("xro.start.myidaserver", "");
d("currentVal before:" + getVal);
SystemProperties.set("xro.start.myidaserver.port", port.trim());
SystemProperties.set("xro.start.myidaserver", "1");
getVal = get("xro.start.myidaserver", "");
d("currentVal after:" + getVal);
break;
}
case R.id.buttonStopIdaServer: {
//停止ida server
String getVal = get("xro.start.myidaserver", "");
d("currentVal before:" + getVal);
SystemProperties.set("xro.start.myidaserver", "0");
getVal = SystemProperties.get("xro.start.myidaserver", "");
d("currentVal after:" + getVal);
break;
}

case R.id.buttonRestartAdbd: {
//重启adbd
String getVal = get("xro.start.myadbd", "");
d("currentVal before:" + getVal);
SystemProperties.set("xro.start.myadbd", "0");
SystemProperties.set("xro.start.myadbd", "1");
getVal = SystemProperties.get("xro.start.myadbd", "");
d("currentVal after:" + getVal);
break;
}

}
}
}

以上修改配置好之后就可以编译刷机测试验证效果。







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    16487

    浏览量

    179796
  • Android系统
    +关注

    关注

    0

    文章

    56

    浏览量

    13567

原文标题:IDA server集成以及App控制启动、停止和配置端口

文章出处:【微信号:哆啦安全,微信公众号:哆啦安全】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ARM Cortex-M0端口与总线介绍及其配置

    控制处理器核流水线停止停止读取与处理指令,整个电路进入功耗极低的状态,最后通过中断与事件唤醒,在本手册内容中不涉及)、调试启动(要将输出端口
    发表于 08-08 16:30

    Project Server 2003配置指南

    本内容介绍了Project Server 2003 配置指南
    发表于 05-16 15:51 0次下载
    Project <b class='flag-5'>Server</b> 2003<b class='flag-5'>配置</b>指南

    Ubuntu Server菜鸟配置手册

    Ubuntu Server菜鸟配置手册──目录 1 安装Ubuntu Server 4 2 简单的配置好服务器网络和SSH 12 3 搭建一个基于 Apache2、PHP 和 Mysq
    发表于 05-22 00:54 54次下载

    Proteus之 步进电动机的启动停止控制

    Proteus之 步进电动机的启动停止控制,很好的Proteus资料,快来下载不学习吧。
    发表于 04-19 09:48 0次下载

    Proteus之伺服电动机启动停止控制

    Proteus之伺服电动机启动停止控制,很好的Proteus资料,快来下载学习吧。
    发表于 04-19 09:54 0次下载

    SQL Server的命令行操作大全

     数据库引擎和SQL Server代理作为服务运行。您可以使用SQL Server配置管理器启动、暂停和停止服务。也可以从命令提示符使用ne
    发表于 10-31 15:09 9次下载
    SQL <b class='flag-5'>Server</b>的命令行操作大全

    基于计数器按钮控制的电机程序启动停止

    基于计数器按钮控制的电机程序启动停止
    发表于 04-02 16:50 16次下载
    基于计数器按钮<b class='flag-5'>控制</b>的电机程序<b class='flag-5'>启动</b>与<b class='flag-5'>停止</b>

    4、Proteus仿真STM32串口通信,发送数据控制LED流水灯的启动停止

    建立通信串口和通信串口中断,在通信中断中加入按键的软件中断,从而控制流水灯的启动停止。本实验只讲解启动,因为停止只需要再
    发表于 12-06 18:06 24次下载
    4、Proteus仿真STM32串口通信,发送数据<b class='flag-5'>控制</b>LED流水灯的<b class='flag-5'>启动</b>和<b class='flag-5'>停止</b>

    添加自定义属性控制fridaserver启动停止

    添加自定义属性控制fridaserver启动停止
    的头像 发表于 08-09 10:08 1854次阅读
    添加自定义属性<b class='flag-5'>控制</b>fridaserver<b class='flag-5'>启动</b>和<b class='flag-5'>停止</b>

    多地启动停止、点动控制电路运行原理

    今天给大家介绍一下多地启动停止、点动控制电路的运行原理。
    的头像 发表于 08-14 11:33 1945次阅读
    多地<b class='flag-5'>启动</b>、<b class='flag-5'>停止</b>、点动<b class='flag-5'>控制</b>电路运行原理

    App中编写控制fridaserver启动停止的代码逻辑简析

    在章节"添加自定义属性控制fridaserver启动停止"已经添加了相关控制属性。
    的头像 发表于 08-22 09:27 2764次阅读
    在<b class='flag-5'>App</b>中编写<b class='flag-5'>控制</b>fridaserver<b class='flag-5'>启动</b>和<b class='flag-5'>停止</b>的代码逻辑简析

    zookeeper端口配置

    。下面是关于Zookeeper端口配置的详细解释。 在Zookeeper中,有几个重要的端口需要进行配置,包括客户端端口、Leader选举
    的头像 发表于 12-04 10:37 2096次阅读

    TSMaster小程序启动停止的自动化控制流程

    在实际应用场景中,用户常常需要按一定逻辑和时序来控制TSMaster内置功能模块的启动停止,TSMaster软件内置有C/Python小程序和图形程序,开发者可以通过编程对这些模块的运行进行精确
    的头像 发表于 12-02 08:21 1417次阅读
    TSMaster小程序<b class='flag-5'>启动</b>和<b class='flag-5'>停止</b>的自动化<b class='flag-5'>控制</b>流程

    变频器启动停止的接线方式

    变频器作为现代工业自动化控制系统中不可或缺的组成部分,其启动停止的接线方式直接影响到系统的运行效率和安全性。本文将详细介绍变频器启动
    的头像 发表于 06-12 15:36 2750次阅读

    Nat server技术原理和配置过程

    Nat server:指定公有地址:端口和私有地址:端口形成一对一映射关系——映射表。这也是Nat server与其他nat的区别之一,Nat se
    的头像 发表于 10-10 14:38 895次阅读
    Nat <b class='flag-5'>server</b>技术原理和<b class='flag-5'>配置</b>过程