恶意代码分析实战Lab1502

本文介绍了一种通过单步调试和patch指令来隐藏字符串的技术,并详细分析了如何在IDA和OD中进行操作,包括如何处理有毒的E8和E9字节,以及如何通过观察跳转指令来理解程序的行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4102386:隐藏字符串的姿势之一:把字符串的赋值改成一个一个字符赋值


这样在strings中就看不到了

在main中,出现了一个红色调用:

在OD中明显可以看到:

在分析函数功能的时候看到了这个:

这个用patch E8字节的方法不太对,所以就选择单步调试下它的参数


s = "63Qpkjf.Qpofs"
print len(s)
for i in s:
	print chr(ord(i) - 1),


在IDA里需要patch的地方:

将E9改成90

将E8改成90


在OD中需要手动改几个跳转

gethostname:返回标准主机的主机名

之后就可以F4到40113F

401386函数的功能就是生成一个字符串

这个跳转不能让它跳过来

这个需要跳转


为了分析下面代码的反汇编,这个不能让它跳转


刚才所有的patch:

修改这个Z的标志位就好

然后就报错了。。。调试思路完全不对啊:因为我刚才的修改,程序的下一步操作是在我们从Internet中读出的字符串里找到“:”字符,因为原字符串是空的,所以报错了


所以换种思路,直接把E8和E9这种有毒的字节patch掉

这个函数的调用说明这样改是对的

相当于jmp


在函数区段里找一找,发现了这一一堆赋值

所以程序肯定和本地计算机的账户有关


第一个请求的URL:bamboo.html


从书中答案总结的分析过程如下:

40115A为假恒成立的表达式,因此一定会满足jnz的跳转(正常程序的esp肯定不为0)

熟练使用data和code的转换,就可以把0xE8抠出来(nop掉是最好的吧)

然后是jz和jnz,两者有且只有一个成立,相当于jmp

下面的反汇编技术显得高级一点:

对eax清零后,jz跳转恒成立,相当于往回的跳转,那么跳转到的是mov ax, 5EBh的中间部分的字节

但是仔细想想其实没有关系,因为之后eax就清零了,所以:还是可以使用刚才data和code的转化方法,变成这样:

相当于两个跳转,最后到的是4012EF

### 富文本XSS漏洞的实战解决方案 #### 了解富文本XSS漏洞的本质 富文本XSS漏洞是Web应用程序中最难防御的一类跨站脚本攻击形式之一。当应用允许用户输入HTML内容而不加严格控制时,恶意用户可以注入JavaScript代码来执行各种有害操作[^1]。 #### 防御策略概述 为了有效应对这种类型的威胁,采用白名单过滤机制成为不可或缺的选择。该方法只允许特定的安全标签及其属性通过,从而阻止任何潜在危险的内容进入系统。此外,遵循安全开发生命周期中的最佳实践对于构建稳固防线至关重要。 #### 实施具体措施 - **输入验证**:确保所有来自用户的HTML输入都经过严格的语法和结构检查。 - **编码输出**:在显示之前对特殊字符进行转义处理,防止它们被浏览器解释成可执行代码片段。 - **使用库工具**:借助成熟的第三方组件如DOMPurify可以帮助简化这一过程并提高效率。 - **定期测试**:持续开展渗透测试活动以发现新的风险点,并及时调整防护手段。 ```javascript // 使用 DOMPurify 净化 HTML 输入示例 const dirtyHtml = '<img src="x" onerror="alert(1)">'; // 假设这是未经净化的数据 const cleanHtml = DOMPurify.sanitize(dirtyHtml); console.log(cleanHtml); // 输出:<img src="x"> ``` #### 参考案例研究 Mall4J是一个实际运用了上述原则的成功范例。该项目不仅实现了前后端分离架构下的全面功能支持,还特别加强了针对XSS攻击的有效预防措施,在源码层面提供了良好的示范作用[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值