狗儿

热爱的话就坚持吧~

0%

ida远程调试linux程序——阿里云CentOS版

你可以永远相信IDA。

之前在本地虚拟机上使用ida的linux_server成功动调,但是类比地使用阿里云服务器却一直不行,阿里云的安全端口也放行了,但就是连不上。很烦,所以这个问题稍后放了放。前两天在捣鼓mysql的远程连接,也遇到了一直连不上的坑,后来发现是CentOS自带的防火墙的锅。今天突然想到,估计这个ida一直无法在阿里云的CentOS上动调,也是防火墙端口没放行的原因(阿里云的放行端口和CentOS自带的防火墙的放行端口不是一个概念)

下面介绍一些详细过程:

测试端口23946是否可通

在windows打开cmd,使用telnet命令测试服务器的端口是否打开,telnet在win10默认是关闭的

img

控制面板内找到程序和功能,在打开的新页面中点击启用或关闭windows功能,再在弹出的新窗口中找到并勾选Telnet Client,确定。

img

cmd下,键入telnet ip 23946,其中ip换成你的服务器ip,如果瞬间清屏并输入一行乱七八糟的字符串则说明端口是通的,如果一直停在正在连接的界面,是不通的。

阿里云放行端口

img

CentOS防火墙放行端口

如果你是使用的是ubuntu,应该不需要这一步的。

ps -ef|grep firewall

firewall-cmd --state

查看防火墙状态

img

firewall-cmd --list-all

查看防火墙放行端口

img

firewall-cmd --permanent --add-port=23946/tcp

放行23946端口

service firewalld reload

重启防火墙

firewall-cmd --list-all

再次查看防火墙放行端口

img

现在再使用telnet应该可以测试通了

服务端

首先进入ida安装目录下的dbgsrv文件夹,将其中的linux_server和linux_server64上传到你的阿里云服务器,路径随便。

在终端修改这两个文件的权限

chmod 777 linux_server

chmod 777 linux_server64

总感觉给others以7的权限有点危险,不管了,现这样用着吧。你可以试着把权限设为755,不给w权限,《加密与解密》中使用的是755权限。

然后把要动态调试的程序放入服务器,记住路径,待会要填写程序所在路径。

然后修改权限,不然待会远程连接的时候,ida会报权限不足

chmod 777 XXX

来到你的linux_server所在目录,在终端输入./linux_server或./linux_server64,这取决于你的程序是32位还是64位。

img

客户端

1567870156455

如上图所示,选择远程linux调试。

1567870237575

填写要调试的程序的路径、服务器域名或ip、密码。未设置则密码为空。

特别注意密码,看了很多网上的教程,都说这个密码是服务器的密码,简直误人子弟。

下面是《加密与解密》中的解释。(第四版91页)

7D877E7A56D88E3FB0E5A7E28653A7C2 (2)

点击ok,然后就可以调试啦。

可能出现的问题

端口被占用

img

可能是已经运行过一个linux_server或linux_server64程序,也可能是其他程序占用了默认端口23946

img

netstat -ntlp|grep 23946

查看正在使用端口23946的程序的信息

ps -ef|grep linux_server

查看包含字符串linux_server的程序的信息

这两条命令可以看出27811的进程跑着linux_server,占用了23946端口

kill -9 27811

杀掉进程

客户端弹窗报错

“incompatible debugging server:address size is 4 bytes,expected 4”

检查程序的位数和linux_server的位数和客户端的位数,需一致。

进阶

添加密码验证

启动linux_server时添加-P

./linux_server64 -P123456

将123456替换成你设置的密码。

注意,-P和密码之间不能有空格,要紧挨着。如果有空格,则密码仍为空。

然后在客户端填写密码。

1567870981750

后台运行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使用方式,欢迎谷歌搜索。

作者小白,如有谬误,劳请赐教,感激万分。

相关阅读: