返回首页

逆向开发工程师跟开发工程师有什么区别吗?

242 2024-05-07 14:48 admin

一、逆向开发工程师跟开发工程师有什么区别吗?

逆向开发,就是拆解工程,把人家的成品拿过来,拆解测量分析,然后稍加改良,模仿制造。

开发工程师则是从无到有,全新研究并做出样机。

二、windows能做ios逆向吗?

暂时不行。

其实如果你真够牛的话还可以这么干。逆向出 ios 的 API 和 ABI自己写一套工具开发应用,逆向出发布到 appstore 的方法,绕开苹果的验证机制发布到商店。最后, 逆向出一个操作系统并非不可能,ReactOS 就是完全逆向 Windows NT 制作的,已经可以直接运行商业软件。

三、什么是逆向开发?

逆向开发是,拿到了别人开发出来的成品,反向推导别人的开发思路、抄袭开发软硬件方案,从而得到自己的整套开发系统,也叫逆向工程。

四、iOS 如何进行逆向工程?

本人逆向经验丰富,对ios和mac osx底层有过深入挖掘. mac和ios有互相借鉴的地方,所以以下提到的信息可能适用于ios或者mac。

  • 0x0.Background: 你必须要有很强的逆向sense,这个是逆向分析的基础,逆向的sense举个栗子:如果你发现看到一个产品之后能够大致猜出它的架构,它的关键部分,核心算法以及可能存在的bug,甚至能够猜出影响性能的是哪部分,这个需要很长时间的逆向分析和工程开发的经验。BTW:语言什么的就不说了,ARM,X86指令,Objective-C,C,C++
  • 0x1.Tools: 你需要掌握以下工具:otool,lipo,ar,libtool,class-dump,mach-o-view(有空读一读它的代码,自己编译以下,加点功能什么的),hopper disassemble,ida pro,gdb,xcode开发要会的就不提了,还有一个很有用的codeunsign,最后再推荐一个我写的一个magic类:cccssw/call_at_anywhere GitHub 这个类用途很广,发挥余地很多.
  • 0x2.Frameworks: 调用私有API什么的是最简单的部分,最直接的路径是去private frameworks下面根据frameworks的名称猜测各个framework是干什么的,然后用class-dump dump出header,在项目里面引用就可以用了.如果观察力到位,发现某些官方app有某些功能能够猜测出背后可能有调用私有api,反汇编这个官方程序就能找到私有api的调用形式.
  • 0x3.Kernel: ios 和macos都是bsd+mach-o的混合模型,网上有一个图很清楚,说明其架构的. mach-o 的格式学习的最佳途径就是看mach-oview这个开源项目的代码。
  • 0x4.Defend technics used by Apple:用得最普遍得就是利用xpcservice将调用放在另外一个可执行程序中,然后函数调用通过进程间通信完成,核心得逻辑不会在这个xpc调用里面,该xpc远程程序会继续调用底层frameworks,最后你就很难找到最核心的逻辑和算法到底在哪里了;关键部分用c实现,然后隐藏data structure,只留出必要的指针,hidden pointer的技术,keychain的实现就是这样做的,要逆向出它keychain的数据库格式非常难,尝试过,失败了;另外一方面可能考虑到代码的可维护性,大部分苹果的代码都有很详细的log,可能有开关控制log的打开关闭,如果能把log开起来,一个程序,framework就很容易跟踪了(静态分析),打开这些log一般要直接修改二进制文件,或者修改特殊的plist文件.
  • 0x5.static analysis:静态分析一般就是先定位最关键的地方,定位的方法很多,一般先开log,然后分析完log后通过关键字来找。定位成功后,没有什么底层技术时,你想要干的事情基本上就快完成了,逻辑就在你面前,汇编配合伪代码就很简单了(除了有FSM或者jmp table的情况,这种情况还是动态分析吧). 有些涉及到底层技术,有一种内核级别调用的陷入函数(涉及到mach-o内核机制)比较麻烦,这种情况也有一些办法,做起来怎么样都是限制大,这篇文章How I cracked the security foundation of Mac OSX System 提供了一些技巧和思路。
  • 0x6.dynamic analysis:动态分析要配合静态来做,主要还是用xcode的调试器或者gdb,xcode的符号断点.f6-f7-f6慢慢调.
  • 0x7.reimplement logics:功能重现,逆向里面经常要做的事情,一个加密算法,解密算法要重新实现一遍,让自己可以用。途径有两条:1.照着汇编写出汇编版,c版或者objective-c的实现;2.直接调用二进制中的函数. 途径1是考你功底的,功底深做起来就是个体力活而已。途径2有两条路,一是修改二进制文件,或者patch你要的逻辑到一个有架子了的二进制文件,二是计算函数地址动态加载。 重点讲一下途径2,静态修改很麻烦,直接暴露需要解决以下问题:mach-o文件中有两个section与export function有关,其中一个Symbol table和与之相关的String table较容易修改,另外一个是Dynamic loader info比较难修改,里面有的相对位置需要做uleb128转换,另外存储信息的格式是链表格式,解决这两个就可以了. 静态修改除了这些,mach-o前面与section对应的头信息也要修改,长度,位置偏移量.; 途径2的动态加载就不多说了,看我github的项目call_it_any_where 应该是目前为止最方便的方式。
  • 0x8.jail-development:越狱开发其实门槛比app store还要低.这一块与逆向有关的主要是hook class之类的,老外有一篇很详细的博文讲这块。貌似就在后面的blog list里面.
  • 0x9.security issues: 建议手机别越狱,mac和ios下的maleware其实比windows下面还难发现.;keychain里面即使最严格的ACL策略也是能够绕过的;

讲一讲会逆向的好处:逆向是一门艺术也是一种研究方法,能够让你弄清楚程序运行的本来面目。看别人的实现也可以用来提升自己的架构能力。逆向能够找到一些诡异问题的root reason。最重要的是逆向能力强后,对程序,代码,算法,数据结构,计算机体系的认识会深刻很多。做项目也会从容很多,不太再会遇到什么bug搞不定。另外个人认为在漏洞挖掘上比起fuzzy逆向才是正途。

不会逆向的程序员不是好程序员。

最后再给些blog供学习:

( 水平一般,如有错误和遗漏还请各位纠正、补充 ;-) )

五、逆向,安卓简单还是IOS简单?

我觉得还是各方面对比一下比较好。

开发方面:

Android开发Java、c/c++、kotlin,iOS objective-c、swift,最大差异可能就是iOS开发需要在macos上的xcode吧,但是程序员搞个苹果本应该都正常吧。

静态分析方面:

Android需要懂samli语法、arm汇编;iOS需要arm汇编,但是根据苹果设备要选择armv7还是arm64架构的汇编;两个平台使用的反编译工具差异不大;这块都差不多。

动态分析方面:

Android IDA就可以动态调试,iOS需要lldb去调试,差别就是ida是图形化的,lldb是命令行的;这块差异也不算大,算iOS稍微难一点吧。

逆向分析:

大致思路都差不多,定位方式也几乎一致,只是有不同的工具辅助定位,也没啥差异,分不出难易。

流量分析:

大同小异,没啥好说的。

注入:

android xposed、magisk;iOS theos,越狱开发装monkeydev就行,frida两个平台都有。也没啥太大差异。

执行文件:

Android dex相关的,so文件,iOS mach-o文件,fat文件;这块android稍微杂了一些,算Android稍微难吧。

常用保护方式:

大家都差不多,思路都差不多的。

保护壳:

因为iOS平台的特殊性,这块Android可以说比iOS的发挥空间要大得多,Android可研究的也要更多一些,Android更难。

系统方面:

Android开源,iOS部分开源,这块都能研究,但是Android能研究得更加深入一些,Android可以魔改系统,随便刷机,这块可以搞得地方太多了。

我是先学Android逆向之后在学iOS逆向的,可能之前踩过坑了,对这块的知识已经建立起一个知识框架了,iOS学起来挺轻松的,没觉得有什么不理解的情况。

个人觉得Android的难点或者可深入研究的领域在于脱壳部分。别看说的只是一个脱壳,脱壳的背后是有丰富的静态分析动态调试经验、文件结构、熟悉Dalvik、art、linker这些组建加载文件的流程、熟悉各种系统层面的hook、熟悉各种安全防护的应对方式、以及对于各个加固厂商持续性的研究还要有十足的耐心才可以达到一个高度。

iOS的难点或者可深入研究的领域是越狱开发。这块要做的就是熟悉iOS开发,有丰富的逆向破解经验,在这之上多去写插件就行。

而ollvm在两个平台都有涉及到,研究这块不仅可以作用在Android、iOS,物联网也能做。

就我个人来说,我更倾向于Android逆向更难一些,最近研究vmp脱壳,一步一步调试去找脱壳点、推指令替换表和还原可执行文件,头都要秃了,而且还只是研究的其中一个入门级的难度,身边有师傅都通杀所有软件壳了我压力好大。

最后,还要准备测试机,相对与nexus来说,iPhone真的是有点贵了。

六、ios开发工程师简历模板

iOS开发工程师简历模板

如果你是一个寻找iOS开发工程师职位的人,编写一份精彩的简历是至关重要的。一个好的简历不仅可以展示你的技术能力和工作经验,还能吸引潜在雇主的注意。在本篇文章中,我们将提供一份iOS开发工程师的简历模板,帮助你轻松创建一份令人印象深刻的简历。

个人资料

姓名:你的姓名

联系方式:你的电话号码和电子邮件地址

教育背景

  • 学位:你的学位
  • 学校:毕业院校
  • 专业:你的专业
  • 毕业时间:毕业日期

技术技能

  • 编程语言:列举你熟悉的编程语言,如Objective-C和Swift
  • 开发工具:Xcode、CocoaPods等
  • 操作系统:iOS、macOS
  • 其他技能:列举你的其他技能,如Git版本控制、RESTful API等

工作经验

在这一部分中,你可以详细描述你的工作经验。列举你在过去的工作中承担的项目和职责,并突出展示你的技术能力和贡献。以下是一个范例:

公司名称

职位:你的职位

时间:工作起止时间

职责:

  • 负责开发iOS应用程序
  • 与团队合作,确保项目按时交付
  • 提供技术支持和解决方案

公司名称

职位:你的职位

时间:工作起止时间

职责:

  • 设计并实现iOS应用程序
  • 协助测试和调试过程
  • 与产品团队合作,讨论需求和功能

项目经验

在这一部分中,你可以列出你完成的一些个人或团队项目,并描述你在项目中的角色和贡献。以下是一个范例:

项目名称

时间:项目起止时间

角色:你在项目中承担的角色

描述:在这里简要描述项目的背景和目标,并详细说明你的贡献和成果。

项目名称

时间:项目起止时间

角色:你在项目中承担的角色

描述:在这里简要描述项目的背景和目标,并详细说明你的贡献和成果。

荣誉和奖项

  • 列举你在学校或工作中获得的任何荣誉和奖项

个人项目

如果你在业余时间开发过一些个人项目,这是一个展示你的技术能力和创造力的好机会。在这一部分中,你可以列举并描述你的一些个人项目。

个人兴趣

个人兴趣:列举你的一些个人兴趣或爱好。这将帮助雇主了解你的多样性和个人特质。

参考人

姓名:参考人姓名

职位:参考人职位

联系方式:参考人电话号码和电子邮件地址

这是一个基本的iOS开发工程师简历模板。根据你的实际情况,你可以灵活调整内容和格式来突出你的优势和特点。记住,一个好的简历可以为你在竞争激烈的iOS开发工程师职位中脱颖而出。

希望这份简历模板对你有所帮助,祝你找到理想的工作!

七、逆向开发什么意思?

逆向开发是,拿到了别人开发出来的成品,反向推导别人的开发思路、抄袭开发软硬件方案,从而得到自己的整套开发系统,也叫逆向工程。

逆向工程(又称逆向技术),是一种产品设计技术再现过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能特性及技术规格等设计要素,以制作出功能相近,但又不完全一样的产品。

八、逆向开发不侵权吗?

逆向开发,就是指拿成品倒推生产工艺和流程么,你可以做“开发”,但“开发”好了不能推向市场盈利,且开发行为没有侵犯权利人的商业秘密,逆向开发后只能自己使用,若制成商品在市场流通盈利,则有侵权风险。除非你有新的改进,并申请了相关知识产权保护。

九、什么叫android逆向开发?

普通"正向"开发是先有需求、技术方案,然后根据这些规格进行从无到有的开发。

逆向开发是,拿到了别人开发出来的成品,反向推导别人的开发思路、抄袭开发软硬件方案,从而得到自己的整套开发系统,也叫逆向工程。由于无法完全掌握别人开发的思路和技术方案原理,肯定存在一些无法消化的技术环节,导致在抄袭了优点的同时也继承了缺点而不知如何避免的情况。在技术储备非常周全的情况下,较少采用逆向开发,即使采用,也是局部的、就无法掌握原理的部分进行。

十、软件逆向工程师待遇?

应届生工程师5000元起,随着技能、工龄增长,待遇提升,无上限。