Resume

实时最新的个人简历

Posted by kunnan on November 7, 2018

联系方式(更新时间:2020-5-1)

  • 手机:1887405 (长沙号码)

  • Email:909877255@qq.com

  • 微信号:同手机号

  • image

个人信息

  • kunnan/男/1992
  • 怀化学院 本科 信息与计算科学 2010.09-2014.06
  • 工作年限:5年
  • 技术博客:https://zhangkn.github.io/tags/ 、https://kunnan.github.io/tags/#security
  • Github:https://github.com/zhangkn
  • 户籍:泉州

求职意向

  • 求职状态:在职,寻新工作
  • 工作性质:全职
  • 期望城市:泉州、厦门
  • 期望职业:高级iOS工程师
  • 期望薪资:税前月薪20k~30k,特别喜欢的公司可例外

工作经验

2018年-11月-至今

QCT信息技术服务有限公司
  • 负责新版的全城淘 AppV3.0的整体功能开发(V3.0.0-3.0.10):
    • 采用MVVM,支持中英文版本切换、新增购物车、收款信息、收银台模块
    • 新增注册模块、防止crash框架;适配iOS13API,提高app整体的操作流畅度和UI用户体验;
    • 负责蓝牙标签打印、票据打印模块(码牌等不具备打印功能的设备,收款成功时在蓝牙打印机打印); 负责有品的开单模块(购物车、SKU、下单、结算、订单捡起、退款、退货、打印小票)、无品的收银台流程、收款信息报表模块(账单流水、收款报表、收银员报表、终端报表)、店铺模块(快捷订单、销售订单、会员、商品管理)。
    • 新增商户开户申请模块,包括电子签名功能。解决iOS12以上版本app杀死之后无法播报问题,支持后台码牌语言播报。新增扫码支付防掉单功能(推送+递归轮循)。
  • 负责淘管家CRM app 的框架搭建,包括以下功能的开发维护(V3.0.0-3.1.5):
    • 代理商系统:商户进件、公海商户模块、待办事项模块、软件订单、订货单、终端绑定、终端维修、收费管理、报表模块(商户交易汇总、代理商交易汇总、终端激活汇总)
    • 解决进件协议照片模糊问题

2017年07月-2018年-11月

湖南微流网络科技有限公司

2013年09月-2017年07月

湖南高阳通联信息技术有限公司

IOS开发工程师、Java程序员

  • 负责iOS的app包括:和包商户版、和包客户端、和聚宝、和包刷卡、商户接入和包支付能力项目 以及为和飞信app 提供安全支付组件
    • 对iOS商户和包支付插件项目进行代码重构,进行底层的网络框架进行封装。独立设计iOS应用架构。
  • java 服务端开发
    • 对高阳ICS 金融平台有较深刻的理解,能熟练开发与第三方系统的接入接出接口
  • 主要职责:完成app的设计、开发、测试、修改bug等工作,包括业务需求的沟通,功能模块详细设计,业务功能实现与单元测试。
    • 除了担任iOS工程师角色外,还担任过项目经理,以及维护支付平台的UI后台管理系统。UI对Portal、IPOS、SMS、Wap、CAS、IVR一共6个渠道提供了规则的配置。

项目经验

2017年07月-至今

ASO(机刷)

2017年10月-至今

app逆向开发(非越狱App集成、tweak)
  • 项目描述: WeChat、Moon;macOS WeChat;逆向系统应用;实现一些特殊的功能。
  • 职责描述:基于特殊app的现有功能,进行功能的优化延展以及关键数据的获取。
  • 项目业绩:快速按时实现需求功能,集成tweak的App支持非越狱环境以及越狱环境,支持多架构(arm_v7、arm64; 采用lipo -create 解决 dumpdecrypted 之后的架构不匹配的问题)。以及支持系统版本范围:V8-V12
  • 使用的技术
    • 动态库的注入原理:
      • 一个是基于修改Mach-O 的Load Commands,即通过修改可执行文件的Load Commands来实现的. 在Load Commands中增加一个LC_LOAD_DYLIB , 写入dylib路径。Usage: insert_dylib dylib_path binary_path [new_binary_path]
      • 一个是利用环境变量DYLD_INSERT_LIBRARIES,例如使用它进行dumpdecrypted(补充:Clutch 通过posix_spawnp生成一个新的进程,然后暂停进程并dump内存)
      • 另一个是在挂载的进程上创建一个挂起的线程, 然后在这个线程里申请一片用于加载动态库的内存,然后恢复线程,动态库就被注入(通过 taskfor_pid函数获取目标进程句柄,然后通过在进程内创建新线程并执行自己的代码。) cycript 就是以这种方式执行脚本代码。
    • hook 的方式: 一个是通过修改内存中懒加载和非懒加载符号表指针所指向的地址来达到修改方法的目的,作用于主模块懒加载和非懒加载表的符号,在越狱和非越狱环境都可以使用,例如fishhook(符号表替换)。一个是 cydia substrate: 通过inline hook的方式修改目标函数内存中的汇编指令,使其调转到自己的代码块,以达到修改程序的目的;主要是针对c,c++ 函数。同时支持针对oc的method swizzle(替换imp)
      • hooking-swift-methods 利用MSHookFunction、MSFindSymbol进行实现。
        • Using nm , we can dump the Swift symbols
        • Using MSFindSymbol we can find the function pointer to the Swift method, and call it
      • hook MGCopyAnswer 使用了 libcapstone + dlopen+ MSHookFunction
      • facebook/fishhook符号表替换:: struct rebinding { const char *name; void *replacement; void **replaced;};
        • rebind_symbols((struct rebinding[1])\{\{"ptrace", my_ptrace, (void*)&orig_ptrace}},1); 第一个参数为需要替换的符号,第二个参数为自己实现的函数名称,第三个参数为原函数地址,因为他是基于地址进行替换的)+ __attribute__((constructor))实现注入
      • ` void MSHookMessageEx(Class _class, SEL sel, IMP imp, IMP *result);`
        • MSHookMessageEx(_logos_class$wxHook$CMessageMgr, @selector(UpdateVoiceMessage:MsgWrap:), (IMP)&_logos_method$wxHook$CMessageMgr$UpdateVoiceMessage$MsgWrap$, (IMP*)&_logos_orig$wxHook$CMessageMgr$UpdateVoiceMessage$MsgWrap$);
      • ` void MSHookFunction(void *symbol, void *replace, void **result);` 注入方式和fishhook 一样,都是基于地址进行hook的
        • MSHookFunction(&CNCopyCurrentNetworkInfo, &newCNCopyCurrentNetworkInfo, &oldCNCopyCurrentNetworkInfo);
        • MSHookFunction((void *)MSFindSymbol(NULL,"_ptrace"), (void *)newptrace, (void **)&oldptrace);
    • object-c 的运行时API: 动态新增属性(objc_setAssociatedObject、objc_getAssociatedObject);修改和获取属性(class_getInstanceVariable、object_setIvar、object_getIvar);swizzling交换替换方法的实现(class_getInstanceMethod、class_addMethod、class_replaceMethod、method_exchangeImplementations,想要执行原来的方法就直接调用replaceMethod,因为方法的实现IMP已经被换了)
    • LLDB+chisel
      • 给/usr/bin/debugserver添加task_for_pid权限, 并开启 debugserver host:port --attach=<process_name>(有五种启动方式:auto、posix、fork、backboard 、frontboard),常用backboard 从头开始调试,例如进行anti ptrace
      • 使用symbolic breakpoint 进行条件断点。
    • 开发的ide和分析工具: theos、monkeydev、lipocycripthopper 进行查看交叉引用,修改汇编、frida-ios-dumpmach-oViewKNtoggle-pie:changes the MH_PIE flag of the MACH-O header on iOS applications to disable ASLR on applications,只支持app,不支持动态库,因为动态库需要ASLR特性的来保证模块基地址不冲突AntiAntiDebug.m

2017年07月-2017年10月

阿布云隧道、 逛有钱 app

2016年02月-2017年07月

和飞信(iOS APP)
  • 项目描述: 和飞信是中国移动提供的基于4G网络和2G、3G、WLAN、4G四网协同环境下的基础通信服务,是语音、消息和通讯录等基础通信业务在4G下的升级,是力求满足客户基础通信升级和社交需求的新产品。产品形态包括Native终端、手机APP客户端、PC客户端三种
  • 职责描述 :
    • 担任iOS工程师角色:负责和飞信中的扫码付、支付密码管理、绑卡、充流量、发红包功能,以静态库的形式提供
    • 负责书写接入文档,维护技术方案文档,解决联调问题
  • 技术
    • 支付插件中截图反馈功能的实现 pod 'KNPodlib'
    • 设备信息的获取:除了使用_idfa、_idfv, 还使用sysctl 获取cpu、macaddress信息,以及使用sysctlbyname获取设备型号等信息、 使用CNCopyCurrentNetworkInfo获取ssid、bssid
    • 关于设备ID的心得: 逆向研究一些app的设备ID以及OpenUDID都是基于CFUUIDCreate、CFUUIDCreateString 进行创建

2015年05月-2015年07月

搭建一个提高开发效率的iOS静态库工程

2015年03月-至今

和包支付能力SDK(iOS CocoaTouchStaticLibrary)
  • 项目描述 :主要用来向其它的应用程序提供便捷、安全以及可靠的支付服务。
  • 职责描述
    • 担任iOS工程师角色。负责整个静态库工程的搭建,以及demo工程的创建
    • 负责和包商户接入支付能力组件的问题解决。
    • 维护接入文档,以及技术方案文档
  • 技术心得体会
    • 体会了采用xcworkspace 进行对xcodeproj的管理的方便。
    • 使用pod lib进行静态库的开发和打包

2015年01月-2017年07月

和包商户版(iOS app)
  • 项目描述 :中国移动面向手机用户及合作商户提供的一项综合性移动支付管理服务.
  • 职责描述 :负责整体app开发和维护
    • 主要功能有消息中心,订单查询,订单消息推送功能、收款。
  • 业务上的收获
    • 商户收款的流程:主要有扫码付、动态密码支付、客户端支付方式进行收款。 此项目嵌入的“我要开店”、“商户资料维护”功能模块 使用H5 实现,方便以后的功能更新;
  • 技术心得
    • 使用coreData 实现消息中心的功能
    • 使用了谓词技术,实现按照日期分组订单列表
    • 使用PushMeBaby工具调试消息推送
    • 采用Charles工具进行问题分析,进行报文分析,修改报文进行开发以及单元测试
    • 总结出app嵌入H5页面的通用模版
      • pod 'KNBaseWebViewController',主要适配webView使用相册的功能。

2014年01月-2017年-07月

和包支付(和包官方iOS客户端)
  • 项目描述 :和包客户端是中国移动和包业务针对手机推出的综合性生活服务平台.和包已发展成为融合了支付、生活服务、购物等多个场景的开放性平台。用户可通过和包客户端在手机上不仅能使用中国移动提供的移动支付服务,如缴话费、收付款、生活缴费、订单支付等,还能在电子券商城购买商品和服务,在带给用户随时随地随身的移动支付体验的同时,还可确保用户交易的安全性和便捷性。 主要功能包括:
    • 1、话费缴纳、流量充值;
    • 2、生活缴费(水费/电费/燃气费);
    • 3、收付款、订单支付、账户充值、提现、账户及交易明细查询、注册和更新;
    • 4、在电子券商城购买商品
  • 职责描述: 担任iOS工程师角色,并担任V3.6-3.9 的项目经理。负责整个项目的进度、风险包括,协调厂商以及技术设计
  • 业务收获
    • 收获了支付产品的业务知识:支付方式主要有有账户和无账户体系。这两个体系下有借记卡和贷记卡支付,以及快捷和无磁有密支付方式。
  • 技术
    • 采用静态库的形式提供安全支付组件给主端集成。优化静态库工程的网络框架的代码,解决了由于更换第三方开源框架导致业务逻辑代码大范围修改的问题。
    • 总结出一套,集成方唤起支付插件,以及支付插件自己退出界面的方法。

2013年11月-2014年01月

UI后台管理系统
  • UI对Portal、IPOS、SMS、Wap、CAS、IVR一共6个渠道提供了规则的配置。包括商户的接入流程审核,用户的身份证审核,清结算、风控、银行入账规则的维护等等。
  • 职责描述 :
    • 负责基础(用户和商户)模块的规则维护
    • 包括以下需求的开发:
      • 平台的报文验签
      • 商户结算打款成功短信通知优化
      • UI系统银行入账配置
      • UI增加商户信用级别商户清单查询
      • UI商户清单信息查询
      • 2014现场商户线上签约协议优化
      • UI系统客户端侧的CCA接口权限配置的快照改造
      • 安卓3.9客户端启动页面配置
      • 客户端公众服务号管理
      • 公众服务消息推送列表查询。
  • 业务收获
    • 熟悉并掌握了支付平台的支付流程、基础模块以及客户端模块的业务
  • 技术收获
    • 对JS、JSP、SQL、Linux技术的进一步巩固.

2013年09月-2014年02月

和包支付平台 (ICS)
  • 项目描述 : 中国移动面向个人和企业客户提供的一项综合性移动支付业务
  • 职责描述 : 担任java工程师。
    • 在无线渠道部门,设计和开发移动客户端的接口,来满足app需求的开发。
    • 通过此角色,能熟练使用高阳的ICS金融平台,对职责链模式有更深刻的理解。掌握了支付密码、登陆密码的加密、转加密流程。

技能清单

1、逆向开发技能

1.1 熟悉的领域
  • iOS 逆向开发,熟悉iphone/tweakiphone/toolcydia的repo 制作cocoapods的Specs repo制作(using-pod-lib-create、private-cocoapods)、使用capstone 对二进制文件进行反汇编来定位方法的地址,以便于MSHookFunction 。

    • 结合MachOView、class dump、tcpdump、Wireshark(rvictl)、nm、usbMuxd、lldb、Cycript、hopper、KNHook、以及AFLEXLoader进行分析快速找到入口。
1.2 例子
1.3 熟悉的iOS模块

2、 正向技能

  • 熟悉Swift/Objective C/Java,cocoapods的Specs repo制作(using-pod-lib-create、private-cocoapods)

  • 深入理解MRC和ARC内存管理机制;

    • 1) 需要释放的资源:imageCache、queue、operations、view、通知监听者的移除、销毁soundID
    • 2) 释放的方法:dealloc 、applicationDidReceiveMemoryWarning、didReceiveMemoryWarning
    • 3)凡是函数名中带有create、copy、new、retain等字眼的,都应该在不需要它的时候进行release。 GCD的数据类型在ARC环境下不需要进行release;[而CF的数据类型在ARC、MRC环境下都需要做release的
  • 熟练使用AFNetworking, MBProgressHUD, MJRefresh, Masonry, SDWebImage等第三方库;熟悉Making CocoaPods;熟练使用git和svn等版本管理工具。

  • 良好的英文开发文档阅读能力、面向对象编程、链式编程以及常用的设计模式:MVC、职责链模式

  • unix (文件目录结构、df、dm、sort、find、grep、cat、vi、ssh、scp)

  • 对前端后台开发技术也有一定的了解;

    • jQuery、JSP、css、html、数据库(sql基本操作)、j2ee(Spring + Struts +Hibernate)、tomcat

技术文章

培训经历

2013.07-2014.01 中信软件教育中心 培训课程: java工程师

自我评价

致谢

感谢您花时间阅读我的简历,期待能有机会和您共事。

转载请注明: > Resume