大家好,我是东哥。
今天,我看到有网友因为同事被开,老板让他接手同事的项目,当他看到下面这几段代码后,整个人都emo了~
说实话,要是我碰上了,整个人也得要崩溃,真可谓世上「最强防御代码」,留下这段代码的大哥,真的是人才啊,拥有了宙斯盾装备,完全撼动不了,开他的老板有苦头吃了😂
说实话,上面这段代码, 感觉多半是被混淆的 ,你 不看原函数根本不知道干啥的,把所有函数全用数字宏定义,根本不知道干什么用的,而且全是指针,就算你有源代码一个—个看函数都得看—天吗,想起当年刚毕业给某安全公司写Cpp代码的时候,经常被领导戏称「 宏孩儿 」,看了这位老哥的代码后,自侃不如😁
上次跟几位做技术的朋友聊天,一起聊到「程序员如何摆脱35岁的魔咒?」,一致认为「在不影响系统性能的基础上,写出同事无法维护的代码」,也许是一种好的办法, 自己写了一个代码混淆器,可读代码自己留档 ,这样接手你代码的人一定会emo的,就算老板招一个新人,如果是一个「菜鸡」,看到这样的代码,也一定会知难而退;说不定后面老板搞不定的时候,会联系你去帮忙解决,这样议价权就在你手上了~
在没有AI之前,也许这样能摆脱35岁的危机,有了AI也许这种办法也不行了,我们一起来试试,把这段源码发给AI, 让它帮我们分析并重新整理成人能看懂的代码, 让它 看看这段代码究竟在搞什么鬼 😂
这里,我还是只给一个简单的提示词,没有写针对性的结构化提示词,如果对提示词感兴趣的话,可以访问这个提示词仓库。
网站地址:https://www.songshuhezi.com/tools/short.html
具体提示词如下:
你现在是一名具有资深开发经验的C++程序员,擅长将混淆代码还原成可读代码,我将发给你一段C++代码,站在你的角度来分析这段代码的作用,将宏定义去掉,并给出你的优化建议,以中文输出。
好了,我们来看看AI给出的回答,如下图:
这便是AI给出的最终优化代码,如下:
#include "bal.h"
extern void ( *1142[ 1 ][ 6 ] )( void );
extern void ( *1143[ 1 ][ 6 ] )( void );
extern void ( *1144[ 1 ][ 6 ] )( void );
extern void ( *1145[ 1 ][ 6 ] )( void );
extern void ( *1146[ 1 ][ 6 ] )( void );
extern void ( *113 )( void );
void call_function(int x, int index) {
void ( * ( *array[ 1 ][ 6 ] ) ( void ) ) = { 1142, 1143, 1144, 1145, 1146 };
(***(*( ( void ( * ( * )[ 6 ] )( void ) ) 114[array[x]] ) + index ))( );
}
int main( void )
{
call_function(0, 0);
while( 1 )
{
call_function(1, 0);
}
return 0;
}
从整个过程中,我们可以看出来AI就做了这么2件事:
将宏定义替换为直接的函数调用。
使用函数指针数组进行函数调用。
由于AI没办法阅读整个项目的代码,它也只能帮你到这一步了,总的来说,这种混淆后的代码真的让人很头疼,我反正是打死都不想去分析,太费时间了,因为我以前经常用ollydbg分析exe,知道这里面的痛苦,我现在是没得精力研究这块了,对这块感兴趣的同学,可以去逛一下 吾爱破解、看雪 这两个论坛,里面有很多脱壳破解的大神😓
好了,说回防御性编程,可以去看看耗子哥之前写的一篇文章【 】,最近,我正在看耗子哥写得一本书【 左耳听风——传奇程序员练级攻略 】挺不错的,在这里推荐给大家读读,也许对你的代码修养有一定的提升。
比如书中提到了如何成为一名有竞争的程序员?如何度过中年危机?整体来说,这本书更多是偏向于底层功底,「道」的层面。
上面关于屎山代码,纯属调侃瞎聊,切勿当真。作为程序员我们要具备基本的职业素养,
拿了别人的钱,就得要好好干事,提高代码的质量,使其更加健壮、易于维护和扩展。
说真的,要是你真的遇上这类代码, 咱们能不动就不动! 毕竟 这代码一看就让人血压飙升,稍不注意,kpi没了,再改,就真的要原地去世了 😂
要是真的没得办法了,也得硬着头皮上,耐心和细致的分析,如果你觉得自己难以搞定,或者非改不可,建议借助AI工具来协助你。
最后,想学编程的同学,可以关注一下这个网站,上面的内容很全哦
网站地址: https://www.j301.cn
热门推荐