2020年IOS逆向反编译注⼊修改游戏或APP的调⽤参数新⼿系列教程——按键
精灵脚本来模拟合成灯笼
2020年 IOS 逆向反编译注⼊修改游戏或APP调⽤参数系列新⼿教程——按键精灵脚本来模拟合成灯笼
开篇
⾸先声明此教程仅做学习交流和知识记录⽅便以后查看使⽤,如果涉及到利益相关的请告知本⼈进⾏删帖处理。
2020年 IOS 逆向 反编译 注⼊修改游戏或APP调⽤参数系列新⼿教程,之所有特别提出是2020年的是因为很多⽼的⽅法失效了,⽹络上⼤部分的教程都是基于2018年左右的IOS10及以下⽼版本来破解,⽽且教程新⼿很难看明⽩,当当就安装这些破解⼯具的环境的坑之多就⾜以劝退很多新⼿ 。本系列教程会列出破解的环境及⼯具版本,尽量避免新⼿⼊坑。
本⼈其实是对IOS领域从零开始的,都是通过看⽹上的博⽂和相关视频资料⾃学的,之前是搞PHP和Python等后台服务器程序的,对编程这⽅⾯是有热情和多年积累的。为什么会想搞IOS的破解,就是因为玩的⼀款游戏想改⾥⾯的头像,做成动态GIF的显⽰,游戏⾥正常上传图⽚是会被裁剪的,导致动图被剪成静态jpg;还有⼀个合成灯笼 ⼩游戏,类似什么合成豪车,阳光养猪场那种合成游戏,我想写个脚
本让它⾃动合成;还有修改游戏的⾦币啊、分数啊。就是觉得好玩~ ,OK,我这种学习过程是结果来驱动过程的,先把⼤的理念想好,接下来就是瀑布流⼀样的把所需要的知识点逐⼀分解,碰到哪⾥不懂就学哪⾥,最终实现我要的效果!并且学到了很多知识,对各类APP的修改也就得⼼应⼿了。其实编程的乐趣就是在于最终结果如愿以偿后的那种成就感。
感觉我把很多语⾔和⼯具都折腾过了~,后端、前端、⼿机端、游戏、都涉猎了。这些年接触很多语⾔,从开始C 、C++、Java、PHP、易语⾔、Python、还有很多web的js等组件、shell脚本、还有linux和kali等操作系统的⿊客⼯具,折腾过各种⼯具、到最近学习的IOS objective-c等,接触多了,实际上语⾔只是实现的⼯具,语⾔的思路是⼀样的,就是数据结构+算法,不同语⾔只是语法的不同,写得好的软件是要⽤到设计模式的。学编程应该了解⼀下。计算机真是博⼤,0与1就衍⽣出这么多形式的计算机世界,就好⽐道⽣⼀⼀⽣⼆⼆⽣三三⽣万物⼀样,世界也如此,万物归根结底其实都是⼀,或者说是"道",抱歉,⽼⼦的道家书看多了 。编译是从⾼级语⾔翻译成汇编、
然后汇编⼜翻译成机器语⾔、机器只知道1和0,所有语⾔最终都会被转换成1和0被机器识别执⾏。当然这是对现代计算机的说法,未来量⼦计算机应该会改变这种0和1的传统模式吧。反编译就是从机器代码中转换成汇编再把汇编翻译成伪代码,通过伪代码⼀般能读懂七七⼋⼋以此来进⾏破解。
本⼈想通过这些博客记录⾃⼰这两周内折腾的过程以及分享最后成功的成果。另外想结交志同道合对IT⾏业感兴趣的盆友,互相交流学习。可以通过博客联系我或加QQ号:1321691245
需求&最终效果
对于从来没开发过IOS程序的我要怎么搞?从何学起?
⾸先先讲我上⾯提到的第⼆个我要实现的需求,让灯笼⾃动合成。其他需求我会新写⽂章来分享,⼤家可以关注或加我联系⽅式。
下图是某游戏的合成灯笼界⾯,通过拖拽把相同的灯笼合成更⾼⼀级的灯笼。我想⽤脚本来⾃动合成,完全⾃动化。
下图是实现后的效果
通过脚本⼤⼤提⾼合成速度!
其实这⾥并不是⽤到反编译和逆向的知识,只是⽤了按键精灵写了模拟合成的脚本,本篇⽂章就先讲按键精灵的使⽤吧,反编译的其他知识后⾯我会逐⼀分享,因为这个按键精灵也是我这段时间折腾的⼀部分。
进⼊正题
折腾吧
环境要求与即将使⽤的⼯具
环境版本
操作系统本⼈的mac是双系统(MacOSX和win7),按键精灵脚本需要在windows开发
按键精灵⼿机助⼿ for windows 3.5.2
按键精灵IOS版 1.5.2
⼿机系统Iphone7 IOS11 需要越狱
环境版本
思路
⼀开始我的做法:
怎么让脚本知道是两个相同的灯笼,然后⼜怎么模拟灯笼拖拽去合并?我想到了按键精灵,早起⽤过
电脑版的⽤来辅助游戏,想不到现在有⼿机版的了!所以想看看怎么弄,我基本也是从零学起的。了解按键精灵IOS版 可以模拟我们⼈⼿的任何触摸指令,我就有信⼼做这个合成判断了,按键精灵的代码是MQ语⾔,有相关⼿册⼤家可以去看。
思路是把12个灯笼区域分割成12个区域,坐标存放在数组中,然后拿每⼀个灯笼来和第⼀个灯笼⽐较特征,特征相同就触发模拟拖拽合并。
另⼀种做法:⽤冒泡算法不判断⾊点,简单粗暴每个格⼦都移动合并,不管是不是相同灯笼,没想到效率更⾼!代码更简单效率更快!
实现代码
这⾥只列出核⼼代码,具体代码见:
ShowMessage "启动脚本。。。。。"
// 横屏
//x
//|__ y
Dim offsetX =260
Dim offsetY =292
Dim CloseXPoint =array(988,2010)
// 3 个特征点 array(y, x)
Dim point1 =array(876,760)
Dim point2 =array(833,777)
Dim point3 =array(894,757)
// 第⼀个灯笼的特征
Dim firstDengLong =array(array(point1(0),point1(1),GetPixelColor(point1(0),point1(1))),array(point2(0),point2(1),GetPixelColor(point2(0),point2(1))),a rray(point3(0),point3(1),GetPixelColor(point3(0),point3(1))))
Dim dengLongArr =array()
Dim i=0,count=0
// 所有灯笼的⽐较坐标点,12个 [[[5,3],[3,1]] , [[5,3],[3,1]]]
// 12 次循环
For i =0 To 2
dim j =0
dim j =0
For j =0 To 3
dengLongArr(count)=array()
// 类似 dengLongArr[count][0]
dengLongArr(count,0)=Array(firstDengLong(0,0)- i * offsetX,firstDengLong(0,1)+ j * offsetY)
dengLongArr(count,1)=Array(firstDengLong(1,0)- i * offsetX,firstDengLong(1,1)+ j * offsetY)
dengLongArr(count,2)=Array(firstDengLong(2,0)- i * offsetX,firstDengLong(2,1)+ j * offsetY)
count = count +1
Next
Next
// 合并灯笼
Function heBingDengLong()
i =0
j =0
// 第⼀个灯笼的特征
Dim firstDengLong =array(array(point1(0),point1(1),GetPixelColor(point1(0),point1(1))),array(point2(0),point2(1),GetPixelColor(point2(0),point2(1))) ,array(point3(0),point3(1),GetPixelColor(point3(0),point3(1))))
Dim currDengLongColorArr =array()
// 11 次循环
For i =0 To 11
currDengLongColorArr =array(GetPixelColor(dengLongArr(i,0,0),dengLongArr(i,0,1)),GetPixelColor(dengLongArr(i,1,0),dengLongArr(i,1,1)),GetPi xelColor(dengLongArr(i,2,0),dengLongArr(i,2,1)))
For j =1 To 11
closeX ()
closeComm()
TracePrint "这⼀点"
dim str =dengLongArr(j,0,0)&"|"&dengLongArr(j,0,1)&"|"&currDengLongColorArr(0)&"-101010,"&dengLongArr(j,1,0)&"|"&dengLongArr(j,1,1) &"|"&currDengLongColorArr(1)&"-101010,"&dengLongArr(j,2,0)&"|"&dengLongArr(j,2,1)&"|"&currDengLongColorArr(2)&"-101010"
If Not(i = j)and CmpColorEx(str,0.9)=1 Then
TracePrint str &"到没有"& i+1&"->"& j+1
// 合并灯笼
heBingDengLongTouch (dengLongArr(i,0,0),dengLongArr(i,0,1),dengLongArr(j,0,0),dengLongArr(j,0,1))
/
/EndScript
//Exit For
Else
//TracePrint 0
End If
Next
Next
End Function
Function hebingDengLong2()
i =0
j =0
Dim temp
// 11 次循环
For i =0 To 10
closeX ()
closeComm()
temp = i
For j =0 To 10
heBingDengLongTouch (dengLongArr(temp,0,0),dengLongArr(temp,0,1),dengLongArr(j,0,0),dengLongArr(j,0,1))
temp = j
Next
Next
End Function
// 移动指定灯笼到第⼀位置
Function moveToFirst(number)
TracePrint "----------------------------"& number
TouchDown dengLongArr(number-1,0,0),dengLongArr(number-1,0,1),1//按住屏幕上的100,100坐标不放,并设置此触点ID=1 TouchMove firstDengLong(0,0),firstDengLong(0,1),1//将ID=2的触点花200毫秒移动⾄500,500坐标
TouchUp 1//松开弹起ID=1的触点
// TracePrint "移动⼒"
End Function
// 拖拽合并
Function heBingDengLongTouch(x1, y1, x2, y2)
TracePrint "----------------------------"
TouchDown x1,y1,1//按住屏幕上的100,100坐标不放,并设置此触点ID=1
TouchMove x2, y2,1//将ID=1的触点花200毫秒移动⾄500,500坐标
TouchUp 1//松开弹起ID=1的触点
End Function
// 关
Function closeX()
// 免费升级的点击
//各种弹层的关闭处理
End Function
Function closeComm()
/
/ 也是各种弹层的关闭处理
End Function
Function isInGameWindow()
// 是否在游戏窗⼝的判断
End Function
// ⼴告处理
Function adProcc()
// 各种⼴告处理。。。。
TracePrint "开始⼴告处理................"一个新手怎么做黑客
// 存在倒计时形式的x按钮
// 误⼊横版的app store 显⽰页⾯
End Function
// 脚本主函数
Function heBingDengLongMain()
For ii =1 To 12
closeX ()
closeComm()
If hasShadowWindow()= False Then
// 原始的判断逻辑,效率低
hebingDengLong()
// 如果想⽤第⼆种合并处理逻辑的话,上⾯的For可以去掉,下⾯的moveToFirst()也要去掉
//hebingDengLong2()
moveToFirst (ii)
Else
TracePrint "不合并"
End If
Next
End Function
If isInGameWindow()= False Then
TracePrint "不在游戏界⾯"
ShowMessage "不在游戏界⾯"
Delay 2000
adProcc()
Else
heBingDengLongMain()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论