php代码审计之——phpstorm动态调试
xdebug调试
调试环境部署
xdebug的版本需要与PHP版本相对于,所以不要轻易改变PHP环境版本。
0 配置php解析器
1 下载对应版本的xdebug
xdebug官网下载地址:https://xdebug.org/download.php
你需要仔细分析和选择要下载的对应版本,否则无法调试。由于非常容易出错,建议采用下面这种简单方法:
xdebug网站提供一个自动分析你系统对应的xdebug版本的页面,网址是 https://xdebug.org/wizard.php
在页面中需要粘贴进去php版本信息,也就是phpinfo()函数的信息,如下图:
ctrl+A全选这个页面的信息,然后粘贴到第一个图片的页面中。
点击 analyse my phpinfo() output 按钮
将下载的DLL文件拷贝到指定目录,按照页面上的提示即可
到此为止,xdebug的下载和启用就完成了,重新运行 phpinfo.php
2 修改php.ini文件里的xdebug配置项
xdebug2:
[XDebug]
xdebug.profiler_output_dir="C:\phpstudy2018\PHPTutorial\tmp\xdebug"
xdebug.trace_output_dir="C:\phpstudy2018\PHPTutorial\tmp\xdebug"
zend_extension = "C:\phpstudy2018\PHPTutorial\php\php-7.2.1-nts\ext\php_xdebug.dll"
xdebug.profiler_append = 0
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 0
;开启远程调试
xdebug.remote_enable = 1
;客户机xdebug调试协议
xdebug.remote_handler = "dbgp"
xdebug.remote_mode = "req"
xdebug.remote_host=127.0.0.1
;xdebug.remote_port默认值为9000,这里需要跟phpstorm配置一致,下面有说明
xdebug.remote_port=9000
;idekey 区分大小写
xdebug.idekey="PHPSTORM"
xdebug3:
[xdebug]
zend_extension = "C:\phpstudy2018\PHPTutorial\php\php-7.2.1-nts\ext\php_xdebug.dll"
xdebug.mode= "debug"
#性能分析文件存放位置
xdebug.output_dir = "C:\phpstudy2018\PHPTutorial\tmp\xdebug"
#步骤调试器,应该是步入步进步出的吧
xdebug.remote_handler = "dbgp"
xdebug.idekey="PHPSTORM"
xdebug.start_with_request = yes
#由remote_host替换过来了,就写本机的就行
xdebug.client_host=127.0.0.1
#由remote_port替换过来了,调试端口
xdebug.client_port=9000
3 配置phpstorm
Ctrl+Alt+S快捷键打开设置,搜索xdebug,其中的Debug port确保不被其他应用占用,当程序无法进入断点时,可以考虑是否有其他应用占用了你本地的9000端口。
在DBGp Proxy中配置你的idekey,idekey和在php.ini配置文件中xdebug.idekey项的值一样,host是你的服务器ip或域名
【File】 ->【Settings】 ->【Languages & Frameworks】 ->【PHP】的servers中配置xdebug服务
测试一下配置是否成功
(如果不成功,根据报错去修改)
4 第一个调试
调试使用:
新建一个运行调试配置
新建php web page页面
照着这样填就好了。
开始调试:
设置断点,开启debug监听。
点击绿色的甲壳虫开始调试。
红色圆中有个对号,是说明改断点生效了
即可看到调试数据在下方显示。
补充--xdebug helper插件
使用该插件主要是为了弥补xdebug本身的局限,直接使用phpstorm xdebug调试的话,设置的断点需要每次都重头运行到断点处,而不能灵活的终止或者其他操作
xdebug helper就可以实现这个功能。需要终止的时候选择disable选项即可,而不需要从头开始。
安装使用:
直接搜索xdebug helper。安装成功后右键进入扩展选项
然后,前面正常配置
浏览器开启debug,发包即可
参考
https://blog.csdn.net/yinhangbbbbb/article/details/79247331
https://www.cnblogs.com/lightsrs/p/9612409.html
https://www.cnblogs.com/beidaxmf/p/14527335.html
php代码审计之——phpstorm动态调试的更多相关文章
- apk逆向 - smali动态调试
author: Dlive date: 2016/10/6 0x00 前言 之前有人问过smali的动态调试方法,其实网上已经有很多文章讲这些内容,但是为了方便大家学习,我还是写一下让大家少走点坑 ...
- 安卓动态调试七种武器之离别钩 – Hooking(下)
0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是活的,如果能搞懂工具的原理再结合上自身的经验,你也可以创造出属于自己的调试 ...
- 安卓动态调试七种武器之离别钩 – Hooking(上)
安卓动态调试七种武器之离别钩 – Hooking(上) 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的 ...
- 安卓动态调试七种武器之孔雀翎 – Ida Pro
安卓动态调试七种武器之孔雀翎 – Ida Pro 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是 ...
- 安卓动态调试七种武器之长生剑 - Smali Instrumentation
安卓动态调试七种武器之长生剑 - Smali Instrumentation 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是 ...
- Android动态方式破解apk前奏篇(Eclipse动态调试smail源码)
一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前其实已经在一篇文章中说到如何破解apk了: Android中使用静态方式破解Apk 主要采用的是静态方式,步骤也很简单,首先使用 ...
- [转]Android逆向之动态调试总结
一.在SO中关键函数上下断点 刚学逆向调试时.大多都满足于在SO中某关键函数上下断点.然后通过操作应用程序,去触发这个断点,然后进行调试 详细的步骤可以参见非虫大大的<Android软件安全与逆 ...
- Android studio动态调试smali
前面介绍了使用IDA动态调试smali,这种方法设置简单,不用重打包,用起来方便,但是如果变量类型设置错误则会马上退出调试,这是让人不爽的地方,而使用Android studio则不会. 0x01 ...
- 【逆向怎么玩】 动态调试一款牛逼C++ IDE实录
声明 本篇只从逆向兴趣出发,研究其程序运行原理. CLion程序版权为jetBrains所有. 注册码授权为jetBrains及其付费用户所有. 不会释出任何完整的源代码. 涉及能直接推算出注册码的地 ...
随机推荐
- Net之多线程用法
1.多线程 2.线程池 3.Task using System; using System.Collections.Generic; using System.Linq; using System.T ...
- 4月27日 python学习总结 GIL、进程池、线程池、同步、异步、阻塞、非阻塞
一.GIL:全局解释器锁 1 .GIL:全局解释器锁 GIL本质就是一把互斥锁,是夹在解释器身上的, 同一个进程内的所有线程都需要先抢到GIL锁,才能执行解释器代码 2.GIL的优缺点: 优点: 保 ...
- 4月12日 python学习总结 继承和派生
一.继承 什么是继承: 继承是一种新建类的方式,在python中支持一个子类继承多个父类 新建类称为子类或派生类 父类可以称之为基类或者超类 子类会遗传父类的属性 2. 为什么继承 ...
- VS2022 安装.NET 3.5/.NET 4/.NET 4.5/.NET 4.5.1目标包的方法
最近重装了系统,就装了一个Visual Studio 2022,发现之前的老项目打不开了,需要下载目标包,但是在Visual Studio Installer 里面无法安装 .NET 3.5/.NET ...
- Mysql查询优化器之基本优化
对于一个SQL语句,查询优化器先看是不是能转换成JOIN,再将JOIN进行优化 优化分为: 1. 条件优化 2.计算全表扫描成本 3. 找出所有能用到的索引 4. 针对每个索引计算不同的访问方式的成本 ...
- @Required 注解?
这个注解表明bean的属性必须在配置的时候设置,通过一个bean定义的显式的属性值或通过自动装配,若@Required注解的bean属性未被设置,容器将抛出BeanInitializationExce ...
- 如何在 Mac 上强制退出 App
同时按住三个按键:Option.Command 和 Esc (Escape) 键.或者,从屏幕左上角的苹果菜单 中选取"强制退出".(这类似于在 PC 上按下 Control- ...
- Java并发机制(4)--ThreadLocal线程本地变量(转)
个人理解: 说明:看了博客园中大神写的ThreadLocal的详解,感觉还是有些迷糊,下面用自己的理解简单描述下ThreadLocal的机制(难免有误): 1.首先ThreadLocal用于存储对应线 ...
- JavaScript中call如何使用?
一句话概括:call是函数才能调用的方法.作用是改变属性环境.有点绕,举个例子. 此处代码是在window环境下声明的变量和函数. var name='王延朋'; var age=18; var ex ...
- 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置?
可以在@RequestMapping注解里面加上method=RequestMethod.GET.