iOS求职的一些困惑


#1

----------------------------------------------------------2017.4.5更新------------------------------------------------------
工作太忙很久没看邮件了,今天发现老坟被挖了,在此更新一下。
楼主目前仍然从事iOS安全研究相关的工作,马上就要工作快一年了。
研究生做的事情只是一块敲门砖,工作之后无时无刻都在学习新的东西,希望现在正处于学生阶段的朋友踏踏实实地做好手里的每一件事情,把自己的基础夯实,以后找工作的时候,无论iOS或者其他技术怎么变,相信你们都能够得心应手。
最后,需要加好友的直接加我qq吧,568151929,论坛的私信我基本没怎么看。

看到师兄师姐们都已经拿到心仪的offer,实在让人羡慕嫉妒恨。这段时间自己也非常困惑,虽然研究生期间也还算努力,并且也做了不少东西,但总觉得不踏实,也不知道以后的方向,希望能在这儿得到一些建议。首先介绍一下自己,本人是北京一所码农学校信息安全研究生,目前研二。先说一下这一年到底做了什么吧,也好让各位大大们根据我的情况给出建议。
2013.03
经过一年的努力最终来到了理想的实验室,由于不是科班出身,于是被安排了iOS这块边缘领域,因为当时整个实验室还没人做这个,老师可能觉得可有可无吧,索性让一个啥也不会的人来做,做不出来也没啥损失。
当时让我做的是一个iOS平台上的抓包软件,各位大大可能觉得很简单啦,但当时对一个连c语言都止步于指针之前的人来说可谓是不可能完成的任务。首先,由于实验室不重视iOS,给了我一个dell电脑,让我装黑苹果。那过程可真是折磨人啊,难怪现在大家都说“装黑苹果所花去的时间和精力都可以拿去赚钱买一台mac了”。经过三天的折腾,是的,三天,可算在一台屌丝机上运行起来了高冷的苹果系统。接下来的时间开始自学oc,iphone开发,学得刚好凑合,并利用libpcap库最终开发出了一个特别简单的抓包应用。
期间了遇到了很多问题,比如:root权限的获取,不得不吐槽一下,当时关于iOS越狱开发的东西实在太少了,而且大部分还是英文,对于我们这种四级狗来说,绝对是摧残,不过也得硬着头皮,开着有道,边看边查,(这一年倒是英语能力提高不少,在今年6月的六级考试中,获得了450+的分数,本人还是很欣慰啦)。不得不得说的是,这期间,还认识了最重要的他,他才貌双全,待人谦和,谈吐高雅,见识广泛,秉持着“授人以渔”的指导理念一直帮助着我。没错,他就是我们的群主,论坛的创建者,书的作者之一——大名狗剩(不上图了,怕太多人过于迷恋)。很庆幸能够得到他的帮助,可以说没有他,也就没有之后我做的那些东西。

2013.06
毕业设计顺利通过,并得到了师兄们的认可(老师压根就没看,次奥),多谢师兄们在老师面前的美言,使得实验室开始稍微重视了这块,于是接下来让我调研iOS平台上的自动化模拟点击功能,同样google了大量资料并在stackoverflow上操着一坨Chinglish提问,最后使用GS库实现了模拟点击的功能(但是还是针对的iOS6,在7上已经不能使用GS库来实现了模拟点击了,一般都是使用的一个韩国人开发的Simulate库)。调研完成之后,接着让我完成点击脚本录制工具的编写。这个工具可谓是一个里程碑,因为它正式把我带入了tweak的开发的大门。当时我问大名,有没有什么办法获得点击的控件的坐标,当时他给我说了一个词“mobilesubstrate”。(这尼玛是啥!!)。不过想到大名授人以渔的指导方式,没敢接着问他,开始自己google,花了一周的时间去搭建越狱开发环境,当时使用的是iOSOpenDev,觉得很方便(不过现在我还是theos用的比较多)。写了经典的“hello tweak”之后,稍微有点明白了tweak的编写套路,定位类-找到方法-编写tweak测试。
写出了这个工具之后,当时记得第一个想法就是写一个自动玩“滑雪大冒险”的工具,哈哈哈~

2013.07~2013.08
这个“暑假”又陆续调研并实现了“后台发送短信、彩信,捕获发送的结果,后台截图,利用opencv进行图片相似度对比,利用sb启动另一个程序,安装、卸载应用等等”。相当充实的一个“假期”。8月底的时候,正式接手一个项目,才知道之前做的所有调研都是给这个项目准备的,目的是开发一个包含所有上述功能的应用,上个月才刚刚结项,甲方那边也很满意。

2013.09
在一次实验室的例会上,一个师兄展示了他开发的安卓动态检测系统,可真是闪瞎了我的眼,可以监控短信,电话记录,url,蓝牙等,当时我就有了开发一个iOS平台上的动态检测的想法。利用两个月的闲杂时间,最后开发了一个tweak,捕获终端上的所有敏感行为,当时结果展示还只是在命令行里用tail来看的,后来被老师无意中看到了这个东西,于是就呵呵了,瞬间就成为实验室的东西了,并催促我在PC端开发一个展示界面。经过两周在Mac上开发了一个展示界面(两周时间再去学其他语言太不靠谱了,今年3月份吧,去了一个沙龙,认识了航哥,书的第二个作者,当时他在沙龙上介绍了他正在编写的一个手机上的检测工具,最后是通过web界面来展示的,当时无比崇拜啊,后来自己也尝试着打算吧这些捕获到的敏感数据放入数据库中,并通过web展示,不过一直没时间弄,也就不了了之了。)。后来又在这套检测系统中加入了通讯录,相册访问等敏感行为的捕获。
2013.10
利用ASIHttpRequest开源框架给上述提到的第一个项目中的应用加入了http通信的功能,使得能够与服务器交互。还有就是一些根据多变的需求不断的改进。这个时候呢,老师以为我iOS这块掌握的很透彻了,让我给他做一个课件,专门讲iOS安全的。这可真是难倒我了,他给了我一本书,就是那本黑客手册,对于一个连虚拟内存是啥都不知道的人来说这尼玛哪看得懂。只好上网找一些国外大会上别人讲过的一些ppt,翻译一下凑出了两节课的课件。(这事一直持续到了今年3月份才弄完)也没啥收获,就知道了几个概念,安全机制啥的,深层次的还是没懂。

2013.11-2014.3
期间除了做项目之外,开始看一些书和博客,比如:《Hacking and Securing iOS Application》,尝试着修改自己喜欢玩的一些游戏,比如寒假期间玩的一款凤凰战机(怀疑雷霆战机就是抄袭的这个),因为只会hook,所以能做到的就只是修改了里面的金币。

2014.4
利用闲暇时间,开始在cydia上开发tweak,其中开发了,ScreenShotshare与iScreenShot(这完全是为了方便自己,本人经常抓拍一下同学的囧样发到微信或qq上),之后又开发了一款自动化点击工具-FingerRobot,并还特意为它制作了视频,哈哈哈,也就图个经历(也没人给我donate啥的)两款tweak都突破了5000的下载量(大牛别喷,让我继续醉下去)。
2014.5~至今

这段时间主要是动态检测系统的维护,以及第一个项目的iOS7移植(好麻烦的说,模拟点击,IPC好多东西都变了)。也协助其他项目写过一个应用提取工具,iOS安全隐患检测的demo(不说也罢,第一个就是利用的libmobiledevice找的代码,第二个就仅仅是检测了设备中的位置隐私泄露隐患功能)。这时候我已经感觉到自己搞来搞去好像也就这点东西,hook,hook,hook,所谓的逆向,也只是简单的用classdump和ida找到可疑的函数,然后继续hook。没怎么动态调试,看不懂汇编,这让我对自己的能力很是怀疑,担心自己以后的竞争力不足。期间了也参加了不少沙龙和syscan大会(感谢DQ430的赠票与热情款待),其中还在CNCERT举行的沙龙上当过主讲人(老师出差去了,就派我去了)。那次沙龙上,认识很对技术大牛,尤其是某个大神,告诉他我情况之后他向我推荐了《Mac OS X and iOS Internal》,好厚的一本书,买不起,电子版下载pad里看,看着特别吃力,不过也比黑客手册好点。目前过完了这本书的第一部分,也只是明白了几个概念,mach-o的格式稍微明白一点,最近在纠结是接着看下去还是先把基础知识补一补。

以上就是我的所有情况,说实验很担心明年的就业,我本人是想去杭州阿里搞安全(有内推最好了,要是有,我研二直接去实习,哈哈),上一届有几个师兄也去了,但是前几天看了看面试题,我去,没一个是自己涉及到了,全是真正的信息安全问题,而我感觉我们干的就是一般的开发工作。希望大神能够给点建议和方向,并且也想知道安全部分到底做些什么,现在我应该准备什么。最后感谢此论坛,感谢逆向群,感谢帮助过我的每一位。


#2

首先我觉得你的能力应该已经完全达到硕士毕业的水平了,起码你做出来的东西是我读硕士时没做出来的,而当时我导师都把我当个宝;
其次你对iOS的认识应该超过绝大多数iOS开发者了,如果想“屈尊”去搞App开发,把方向稍微调转以下,花上3~6个月熟悉一下App开发的流程,写出的代码质量已经可以完爆这个行业80%的人;
当然,如果你的兴趣还是在逆向和底层,建议你再花一点时间和精力啃下IDA静态调试,LLDB动态调试和阅读汇编的能力,只要入门就行。接下来的说实话就是拿时间堆了,攒经验和熟练度,逆向的功力就会越来越见长。现在提供底层和逆向机会的公司越来越多了,因此你压根不用担心工作的问题。
说上面这些,总的意思就是说你要对自己有信心,我读硕士时也觉得自己是井底之蛙(跟Daniel,rpetrich这种人比起来),出来工作一年后发现原来大多数人还只是蝌蚪,我的水平就算很不错的了(跟多数iOS从业者比起来)。你的危机感更多地来自于“比上”,当你有了更多“比下”的机会时,相信你的心态也会慢慢平和。

临近毕业时,我觉得你可以先想想自己目前喜欢什么,想做什么,是想做App开发,还是专攻逆向、底层、安全这一块;
然后想想长远一点看的话,自己想达到一个什么目标,是赚钱,还是挖漏洞,还是自己动手越狱,还是创业什么的,以及赚钱,挖漏洞,自己动手越狱,创业等等又是为了什么;
最后看看怎么把自己喜欢的东西往你的长远目标上靠,也就是把你抽象的想法给具体化,行动化的一个过程。一旦通过这种方式找准一个目标,你就已经把那些90%混日子的同龄人爆成了渣,再配合比较强的执行力,这个目标想不被实现都难。换句话说,你的目标这么明确,又这么努力,怎么可能输给那些成天混日子的人?


#3

能做出这些东西可都是站在你们的肩膀上啊。
谢谢大名再一次的指导,我不算搞开发,可能还是搞逆向和底层吧,这段时间我会按你的提议学习一些静态调试的东西的。


#4

谁都是站在前人的肩膀上的,我还站在DHowett和rpetrich的肩膀上呢,没必要因为这个而感到不好意思或者怎么样;
我的意思是,能搞明白逆向,说明学习能力很强;如果说正向开发需要的学习能力是5分,逆向就是8分。用8分的能力去干只要求5分的事,你可以把5分的事干得比只具有5分能力的人好得多,而且他们永远追不上你。所以搞不搞正向仅仅取决于你的主观意愿,你的可选范围更大,其实形势更主动


#5

楼主还是很厉害的,,让我们这种刚入门的汗颜。。。
请问下您写的那些东西,比如那个动态监测系统(后来也有很多甲方的来看该系统,据说还有以高价购买的), 是不是都只能在越狱的机器上安装和运行的? 如果非越狱的不能跑为啥还有这么多人要买呢?


#6

因为只是拿来做检测,针对软件的检测,不是监测,所以用越狱机也就够了


#7

请问下楼主现在在哪工作?做什啊
有同样的困惑


#8

阿里移动安全都面啥?


#10

给楼主膜了,无意间挖到这篇好玟