那曲檬骨新材料有限公司

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

    文章

    16445

    瀏覽量

    179429
  • Android系統
    +關注

    關注

    0

    文章

    56

    瀏覽量

    13550

原文標題: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 ?1831次閱讀
    添加自定義屬性<b class='flag-5'>控制</b>fridaserver<b class='flag-5'>啟動</b>和<b class='flag-5'>停止</b>

    多地啟動停止、點動控制電路運行原理

    今天給大家介紹一下多地啟動停止、點動控制電路的運行原理。
    的頭像 發表于 08-14 11:33 ?1922次閱讀
    多地<b class='flag-5'>啟動</b>、<b class='flag-5'>停止</b>、點動<b class='flag-5'>控制</b>電路運行原理

    App中編寫控制fridaserver啟動停止的代碼邏輯簡析

    在章節"添加自定義屬性控制fridaserver啟動停止"已經添加了相關控制屬性。
    的頭像 發表于 08-22 09:27 ?2718次閱讀
    在<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 ?2035次閱讀

    TSMaster小程序啟動停止的自動化控制流程

    在實際應用場景中,用戶常常需要按一定邏輯和時序來控制TSMaster內置功能模塊的啟動停止,TSMaster軟件內置有C/Python小程序和圖形程序,開發者可以通過編程對這些模塊的運行進行精確
    的頭像 發表于 12-02 08:21 ?1384次閱讀
    TSMaster小程序<b class='flag-5'>啟動</b>和<b class='flag-5'>停止</b>的自動化<b class='flag-5'>控制</b>流程

    變頻器啟動停止的接線方式

    變頻器作為現代工業自動化控制系統中不可或缺的組成部分,其啟動停止的接線方式直接影響到系統的運行效率和安全性。本文將詳細介紹變頻器啟動
    的頭像 發表于 06-12 15:36 ?2687次閱讀

    Nat server技術原理和配置過程

    Nat server:指定公有地址:端口和私有地址:端口形成一對一映射關系——映射表。這也是Nat server與其他nat的區別之一,Nat se
    的頭像 發表于 10-10 14:38 ?877次閱讀
    Nat <b class='flag-5'>server</b>技術原理和<b class='flag-5'>配置</b>過程
    澳门百家乐网上赌| 百家乐注册优惠平台| 金凤凰平台| 百家乐大西洋| 金界百家乐官网的玩法技巧和规则 | 澳门百家乐新濠天地| 百家乐官网赌场详解| 百家乐怎么玩呀| 百家乐官网现金平台排名| 大发888心水论坛| 百家乐最好打法与投注| 百家乐官网tt娱乐平台| 百家乐官网视频一下| 大发888送58体验金| 百家乐伴侣破解版| 闲和庄百家乐官网娱乐| 百家乐官网视频打麻将| 百家乐打法| 水果机8键遥控器| 神话百家乐的玩法技巧和规则| 百家乐官网庄闲和各| 大发888开户日博备用| 百家乐官网专业赌| 澳门百家乐官网在线| 金宝博滚球| 棋牌室转让| 大发888官网游| 新濠百家乐的玩法技巧和规则| 澳门百家乐官网心| 百家乐官网游戏打水方法| 大发888官网注册送58| 百家乐是真人发牌吗| 迪威百家乐娱乐场| 百家乐mediacorp| 皇冠百家乐客户端皇冠| 百家乐官网注册18元体验金| 澳门百家乐官网打法精华| 大发888 在线登陆| 大发888国际娱乐平台| 大发888娱乐场下载官方| 威尼斯人娱乐场下载|