吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2084|回复: 12
收起左侧

[C&C++ 转载] 分享几点编码安全的技巧

  [复制链接]
c_kongfe 发表于 2021-3-23 10:46

文章目录
1.技术背景
2.字符串的安全方案
1.直接使用字符串
2.字符串赋值到数组使用
3.调用系统函数安全方案
1.直接调用系统的函数
2.自定义实现函数再调用函数
4.总结
1.技术背景
作为程序开发人员,我们害怕,听到开发的代码,被测试出bug;我们更害怕,听到我们所开发出来的产品上线了,被新手安全研究员给反汇编逆向破解,代码功能直接被人给盗取了。下面根据我自己的一些项目经验,跟大家分享两点如何能开发出相对安全的代码。以下方案不局限于任何语言代码开发,是一个相对通用的安全编码方案。
2.字符串的安全方案
1.直接使用字符串
不建议使用理由:直接定义使用字符串,因为字符串是一个常量,所以我们直接能在静态反汇编中直接看到字符串的数据信息。

1

1


下图可以很清晰的看懂字符串信息”ntdll.dll”,这样就把代码的字符串信息直接暴露给大家,这样大家就可以通过字符串信息做一些对代码不安全的事情了。



2.字符串赋值到数组使用
建议使用理由:将字符串写到数组里面并进行赋值,使得字符串存放在堆里面,这样在程序的字符串常量信息就无法直接看到字符串信息,这样进行静态分析(IDA)的时候字符串信息就没有展示了,这个需要进行动态分析(OllyDbg)才能分析到字符串信息。

2

2



下图展示的是通过将字符串信息存储在数组中的汇编代码,在实际的汇编代码中展示的是一串数据,而不是直接的字符串,这就无法直接看到字符串信息去理解代码,要想理解这串字符串信息,那么就需要去做动态调试分析。从而加强代码的安全性。
webwxgetmsgimg (21).jpg
3.调用系统函数安全方案
1.直接调用系统的函数
不建议使用理由:我们在编码过程中,有很多功能系统都已经有提供的函数接口,一般情况下我们都是直接调用系统函数直接进行实现功能。但你知道吗?你这样直接调用系统函数在一些场景下是不安全的,当你的程序在被安全逆向研究的时候,直接可以通过程序的导入表,以及反汇编看到调用的系统函数,这样我们只要一查下系统函数的功能,那么就可以知道大概的功能点,还有只要一挂钩(HOOK技术)上系统的函数,那么你所调用的系统函数的功能就失效了。
webwxgetmsgimg (22).jpg


下图展示上面函数通过调用系统函数实现的汇编代码。大家可以直接通过展示的系统函数去分析功能。
webwxgetmsgimg (23).jpg


2.自定义实现函数再调用函数
建议使用理由:我们对于关键功能函数建议还是采用自己去实现函数功能,再去调用,这样可以加强程序被直接分析的难度,从而加强程序的安全性。
webwxgetmsgimg (24).jpg

下图是自定义实现函数调用的汇编代码,可以从下面汇编代码看到关键函数是自己实现的,那么要了解该函数功能就需要进入到函数内部去做分析。这从而加强了关键函数功能的相对安全。

webwxgetmsgimg (25).jpg
4.总结

最后说明,以上是经过项目实践总结出来的安全开发方案。我们在项目开发中需要写高内聚,多耦合的代码,同样也需要写一些没有bug的代码,更需要写一些更加相对安全的代码,更需要写一些能增加逆向破解者分析程序的难度(注:这里会有专业人士会说代码直接加VMP保护,不啥问题都没有了吗?不过这这里只进行说明代码开发的一点安全思路),这个才是我们程序员的终极目标,希望本文所阐述的思想能够让大家有所启发。

免费评分

参与人数 3吾爱币 +2 热心值 +3 收起 理由
HKJ97 + 1 + 1 谢谢@Thanks!
yolre + 1 用心讨论,共获提升!
ForUsContribute + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| c_kongfe 发表于 2021-3-23 13:52
ifthen 发表于 2021-3-23 11:47
字符看不到。编写的时候。自己不麻烦吗

特殊敏感的字符串隐藏了就可以,不需要所有字符都进行隐藏。
爱你小吉君 发表于 2021-3-23 10:51
王雪峰 发表于 2021-3-23 10:57
AnneYaos 发表于 2021-3-23 11:02
收藏了,确实很实用啊。之前看有些网站的调试界面真的看完都不敢登录自己的信息
ifthen 发表于 2021-3-23 11:47
字符看不到。编写的时候。自己不麻烦吗
codyy 发表于 2021-3-23 11:59
有没有做开发的大佬,真的有人实际开发中这么复杂地使用字符串?
fmxk 发表于 2021-3-23 13:54
很棒的,谢谢楼主
li5021467 发表于 2021-3-23 21:51
虽然看得不是很懂,但支持一个
yao52ai 发表于 2021-3-23 23:25
谢谢楼主
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 20:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表