记一次IDA远程调试linux程序失败的解决过程——阿里云CentOS版
前言
之前在本地docker上虽然可以运行二进制程序,但无法动调(现在都还没解决del>
就想买台阿里云服务器来实现,但但我动调的时候发现不行
此时已正常运行
服务
我怀疑是云服务器端口没开,就想用 Telnet 来检测一下
测试端口23946是否可通
首先安装 Telnet
Windows 平台
打开控制面板
首先我们打开控制面板,打开方式较多,这里举如图所示方式打开
依次操作:



之后点确定.
接着打开命令提示符(通过运行等方法也可以)
Mac 平台
由于新版本的 Mac os 取消了内置的telnet命令,所以需要额外安装.
安装 homebrew
(如果安装可以自行跳过)
1  | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"  | 
输入密码之后一直回车就可以了
查看homebrew 是否安装成功
在终端中键入 homebrew help 如果出现如图所示即为成功 
使用 homebrew 安装telnet
1  | brew install telnet  | 

查看是否安装成功

到这就安装完成了.
telnet使用
键入telnet ip 23946,其中ip换成你的服务器ip
如果一直停在正在连接的界面,则证明端口未开.例如:
我的这个服务器端口就是关闭的.
接下来就是
阿里云端口放行

关闭CentOS自带的防火墙
如果你是CentOS还需要关闭CentOS自带的防火墙(阿里云的放行端口和CentOS自带的防火墙的放行端口不是一个概念)
如果你是使用的是ubuntu等,应该不需要这一步的。
1  | ps -ef|grep firewall  | 
查看防火墙状态
1  | firewall-cmd --list-all  | 
查看防火墙放行端口
1  | firewall-cmd --permanent --add-port=23946/tcp  | 
放行23946端口
1  | service firewalld reload  | 
重启防火墙
1  | firewall-cmd --list-all  | 
再次查看防火墙放行端口


拓展
(截图内容取自网络.)
端口占用
可能是已经运行过一个linux_server或linux_server64程序,也可能是其他程序占用了默认端口23946
1  | netstat -ntlp|grep 23946  | 
查看正在使用端口23946的程序的信息
1  | ps -ef|grep linux_server  | 
查看包含字符串linux_server的程序的信息
这两条命令可以看出27811的进程跑着linux_server,占用了23946端口
1  | kill -9 27811  | 
杀掉进程
客户端弹窗报错
“incompatible debugging server:address size is 4 bytes,expected 4”
检查程序的位数和linux_server的位数和客户端的位数,需一致。
添加密码验证
启动linux_server时添加-P
1  | ./linux_server64 -P123456  | 
将123456替换成你设置的密码。
注意,-P和密码之间不能有空格,要紧挨着。如果有空格,则密码仍为空。
然后在客户端填写密码。
后台运行linux_server
linux的一个终端就是一个进程,如果你关闭了这个终端,里面进行的服务也会中断。这里介绍一个命令。
screen -S name创建一个新窗口,名称为name(name可以替换成你希望的名称),然后在这个窗口内打开linux_server服务。
当你需要回到主窗口时,先按ctrl+a,然后继续按下d,按d的时候不要放松ctrl+a,即可回到主界面。
想要回到name窗口,可使用screen -r name,如果除了主窗口外只有一个窗口,可以使用screen -r
这样,只要你不杀掉新开的这个窗口,哪怕你关掉终端,也能远程调试。
但是需要注意的是,这样一直开着linux_server服务,存在安全隐患,所以不调试时建议不要开启linux_server服务。
更多screen使用方式,欢迎谷歌搜索。


