二进制安全面经汇总

先介绍一下本人情况 985本,安全科班,上大学才开始接触的二进制安全,三月初开始准备春招,主投安全岗,辅投开发岗

主力语言C/C++/Python,接触过C#和java,涉猎比较广,各个领域都有过接触。安全能力上二进制接触比较多,web有过了解,主要经历在安全系统研发方面。

不得不说的是安全岗就业面确实比较窄,我原本以为自己很热爱安全,现在有一点点怀疑了

话不多说,上干货!

(我个人总结面经比较喜欢按主题模块分类,不是很喜欢以公司来分类的,所以将各个公司面经都整合成一个了,遇到新问题就往里面加)

C/C++逆向开发

  1. C/C++结构体大小如何计算?
  2. C++的结构体和C的区别?
  3. new和malloc的区别(delete和free的区别)
  4. 如何找到main函数?(这里要继续细分,win32桌面程序,控制台程序,linux下的命令行程序)
  5. 构造函数与析构函数调用时机
  6. C/C++编程有没有遇到的安全问题(我讲的一个浅构造导致的double free)
  7. 重载如何实现(静态函数名重载,动态虚函数重写)
  8. 虚函数如何实现?(重点,几乎必问,虚表指针位置)
  9. 虚继承/多重继承的内存结构(VC和G++中虚继承中虚表结构不太一样,这里我研究过,扯了一大堆)
  10. switch的实现与优化(难点)
  11. try-catch的实现与优化(难点,会顺着问到windows异常处理机制)
  12. 三种循环哪种效率最高?
  13. 32位下调用约定有哪些?(stdcall c标准调用 fastcall thiscall)
  14. 64位下调用约定?(VC:rdx rcx r8 r9,GCC: 多rdi rsi)

二进制逆向(反调试/脱壳/免杀/挂钩/注入)

这部分为安全岗面试重点

  1. 32位程序如何在64位机器上运行?
  2. PE格式(重点,几乎必问)
  3. PE装载进内存执行的过程(重点,内存对齐,IAT表建立,重定位)
  4. 知道哪些反调试手段?(SEH,反断点,查调试环境)
  5. gdb/od基本命令
  6. 调试器原理(三大断点实现)
  7. 如何脱壳(压缩壳/加密壳/虚拟化壳)
  8. 为什么脱完壳要修复导入表?
  9. 花指令有没有脱过?
  10. 有没有写过IDA脚本(逆向岗位几乎必问)
  11. 如果一个程序没有字符串/字符串被混淆了如何找核心代码?
  12. 内存泄漏如何排除
  13. 有没有做过免杀,怎么做的?(静态二分法定位,思考对面规则怎么写的,动态绕钩子检查,卸钩子,提权走底层)
  14. 沙箱有接触过吗?(并没有...)
  15. 有没有用过虚拟机?(QEMU, VMware Bochs)虚拟化有哪几种方式实现?虚拟机查杀有什么思路过吗?
  16. Hook有哪些方法?(几乎必问,inline hook,函数表hook)
  17. 如果inline hook前几个字节不能正好5字节Patch如何处理?
  18. 分析过哪些病毒样本?病毒分析有什么方法?(问到了深信服的实习)
  19. 特征码怎么提取的?
  20. .NET的实现(因为项目研究过.NET)
  21. flags寄存器有哪些位,有什么作用(OF, ZF, TF, 虚拟位)
  22. 控制寄存器有哪些,有什么作用(可以重点说说CR0和CR3)
  23. 共享内存怎么实现
  24. windows下有哪些注入方式?怎么实现?(重点)
  25. windows下3环向0环的切换过程?
  26. ARM汇编了解过吗(没有...)
  27. 如何防止内存被扫描?
  28. 如何隐藏进程?(说了一个CPU控制区找EPROCESS断链)隐藏之后对进程运行有影响吗?

漏洞利用

楼主pwn菜鸡,web不是很熟悉,说得都是比较基础,不过其实对漏洞利用很熟悉的面试官也不是特别多。

  1. windows/linux基本保护机制(栈执行保护,基址随机化,代码段随机化,栈溢出保护)
  2. 怎么绕过?
  3. pwn的一些印象深刻的题目,或是技巧(这部分如果面试官不是相关领域的建议不要说太深入,太细节的技术很复杂,很难讲懂)
  4. 堆漏洞利用?(double free, UAF)
  5. 栈上漏洞利用有哪些
  6. linux堆管理,glibc/slab/伙伴算法
  7. 脏牛
  8. web漏洞有了解吗?
  9. SQL注入、XSS攻击原理?
  10. ARP欺骗怎么实现的?
  11. 如何判断远端服务器的操作系统?

项目相关

  1. Powershell防御项目讲一下?
  2. 怎么防止无文件攻击?
  3. 分析过哪些脚本病毒?
  4. 加密混淆怎么处理?
  5. 知道哪些加密算法,非对称加密与对称加密的区别?
  6. .NET钩子怎么下的?
  7. 做过流量检测?说说怎么提的特征?
  8. 顺便问到TCP连接建立与释放(典中典)
  9. 问到毕业设计,简述一下你的静态分析算法怎么设计的
  10. 开发过Linux键盘监控?怎么实现的?
  11. windows调试器怎么实现的?(3环API...)
  12. 写过端口扫描工具,怎么实现的?(netfilter框架编程)
  13. ARP Poison怎么写的?(原始套接字,linux上好写一些)
  14. 写过区块链的项目,说一下?(写的Spring + Solidity,但是接触不深,不是很回答上来)

暂时想到这么多,后续有需要进行补充

#面经##春招[话题]##安全岗##安全攻防工程师#
全部评论
牛啊 知识很全
1 回复 分享
发布于 2023-04-25 19:46 陕西
ieg招安全? 做逆向的么
点赞 回复 分享
发布于 2023-07-23 00:25 上海
老哥是鹅厂哪里呀 IEG吗
点赞 回复 分享
发布于 2023-04-23 14:46 河北
老哥牛哇
点赞 回复 分享
发布于 2023-04-16 23:55 北京
安全就业面确实比较窄。我的技术储备更多是Web渗透测试这方面的,可能也是能力不够吧,拿不到这方面的offer,但是不想去卷前端后端,我宁愿在安全公司做售前。想问问大佬现在是还在等结果吗
点赞 回复 分享
发布于 2023-04-08 20:03 四川

相关推荐

头像 会员标识
06-07 14:49
南宁学院 Java
在1.对于发布商品和交易的总数的时候,数据库的设计:因为对于发布者发布的总商品和交易的总数,这部分不仅仅只是涉及到用户表,同时也涉及到商品表,那么在我的二手闲置商城中,为了确保系统的性能以及可扩展性,不应该盲目尊崇数据库设计的范式,而是实现数据库表的yonyu字段,使其反范式化 那么分析一下,第一版我对于商品与用户的表设计时,考虑的是在商品与交易表中实时的通过count去计算我们的商品数,这样在用户界面时查看自己的交易与发布的商品的时候,能够实时的去计算和查看我们的发布的商品总数和交易总数,但是这样也带来了一系列问题,如,当我们用户不断的去发布商品和交易的时候,对于我们的数据库带来的性能压力是极大的,可以想象,当用户的商品积累至万级时,所损耗的性能了,每次访问都需要计算对于初期是可以的,但是并不优雅​那么我的第二版解决方案是什么呢? 即在用户表中实现插入yonyu字段,将用户发布的商品使用计数器的形式去写入数据表中,这样,我们就可以通过查询用户的字段即可实现读取交易总数和发布商品的总数,但是会出现什么问题呢?每当用户发布一个商品或完成一笔交易,都需要更新 `users` 表中的这个计数字段。这会导致对用户表的高频写入,在高并发下容易产生行锁竞争,影响核心用户服务的性能。​但是对于我的这个小平台而言,这已经是比较好的一个设计方式了,对于业务增长没有怎么大的情况下,这可以应对1000-2000人的使用。但是,作为一个优雅的程序员,我已经在这部分埋点了,这部分后期我需要去实现第三版优化。具体的优化方式为:​在深入了解了EDA,RabbitMQ的底层原理,我可以确定的是,我们完全可以去是实现一种读写分离,并且考虑最终一致性的一个设计模式,对于微服务而言,我们并不需要去对商品,用户,订单服务进行额外的增加yonyu字段,而是可以去考虑在用户行为模块中,实现DDD架构中的聚合模式,想象一下,目前我的商品模块在发布商品的时候,已经实现了RabbitMQ的异步发布机制,当然,这部分的商品发布机制对应的只是个性化推荐系统的商品推荐,那么我能不能在用户行为模块中实现一种消费机制,实现用户的发布商品与交易商品的回显呢?当然可以,用户的行为模块是关于收藏,点赞发布评论,这些都是可以实现异步机制的,我们不需要实时的去显示,而是为了考虑最终一致性而设计的。
点赞 评论 收藏
分享
评论
30
139
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务