• 博客园logo
  • 会员
  • 周边
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
 






Hacker yang

 
 

Powered by 博客园
博客园 | 首页 | 新随笔 | 联系 | 订阅 订阅 | 管理

IOS逆向分析——GL脚本的提取

 

 总结:要逆一个程序必须清楚地知道程序的结构和常用的API函数,不清楚一个程序而去逆出结果是不可能滴

   首先是glsl脚本运行的全过程,第一步是为shader的运行创建一个容器GLuint glCreateProgram(void),第二步是把编译好的shader附加到程序void glAttachShader(GLuint program, GLuint shader),编译好的shader可以是多个所以第二步可以重复多步把每一个编译好的一一附加到程序,顶点shader和像素shader一一成对,第三步是 void glLinkProgram(GLuint program)用来连接这些程序,第四步void glUseProgram(GLuint prog)使用它。

 

  要提取脚本就要知道第二步中怎么把shader编译好怎么传递字符串,编译shader又分为三步,一是创建容器GLuint glCreateShader(GLenum shaderType),二是添加源代码void glShaderSource(GLuint shader, int numOfStrings, const char **strings, int *lenOfStrings),三是编译void glCompileShader(GLuint shader)

 

  看懂了这些一眼就知道要提取shader就是在它添加原代码的时候下断点,编译和其他的函数都没有和字符串相关的,只有glShaderSource是添加源码,其他的函数都没用,找到了关键函数看参数,第三个参数是字符串指针,断下后在寄存器R2中打印出来,p *(char**)$r2,运行一次断下打印一次,全部复制出来所有的shader便全部提取出来了

 

  逆向过程看起来很简单,主要要熟悉程序的流程找到关键函数,断错了就越走越远了

  

发表于 2014-08-15 23:46  逆羊羊  阅读(351)  评论(0)    收藏  举报
 
刷新页面返回顶部