吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 31268|回复: 122
收起左侧

[iOS 原创] 后续=>非越狱手机钉钉搭建修改经纬度的UI界面

  [复制链接]
zhufeixing 发表于 2018-12-13 12:37
本帖最后由 zhufeixing 于 2018-12-13 15:18 编辑

前传 https://www.52pojie.cn/thread-837108-1-1.html

基于上一个帖子https://www.52pojie.cn/thread-837108-1-1.html遗留的历史问题
1.很多小伙伴反应把Bundle ID改为“ com.laiwang.DingTalk ”运行后钉钉依然提示“非官方应用”
以下是我的操作,由于我没有越狱手机,只能在pp助手下载,下载是注意要下载越狱应用而不是正版应用,下载的是PP助手上钉钉最新版本4.5.15 ,APPStore上的是4.6版本

1.png    2.png
  

2. 注意:真机运行需要开发者证书,把Bundle ID改为“ com.laiwang.DingTalk ”,Version改为对应的“4.5.15”,真机运行成功,没有提示“非官方应用”。

3.png



======================================== ===凉凉的分割线

上一个帖子的经纬度是写死在代码里面的,当公司安排出差的时候就有点尴尬了 ,签到的还是公司的位置,决定对其进行简单的改良,可以在钉钉内手动输入经纬度坐标(经纬度自己百度查询)。


一.使用封装好的第三方库DingTalkUI ,此库封装了我上一篇修改定位的代码,我们利用Cocoapods进行导入安装到我们的dingding项目中
1.打开终端,定位到dingding项目所在目录,执行“ pod init”操作

4.png


2.进入dingding目录,利用xcode方式打开Podfile文件,规则参照https://github.com/AloneMonkey/MonkeyDevSpecs

5.png



3.修改好Podfile文件后进行保存操作,利用终端进入dingding目录进行“pod install”操作,导入DingTalkUI库成功。注意:( 修改Pods->dingdingPodDylib的 Build Settings Build Active Architecture Only Debug改成No。 )
6.png 8.png


4.运行dingding项目,安装完第三方库后在(某些不完美越狱的手机)上运行项目闪退,在非越狱手机上正常运行(还没想到解决方法)在越狱手机上报错。。。如下图,找到解决办法请告诉我
7.png


5.进行hook操作,给钉钉添加修改经纬度的输入框界面,我们要把输入框添加到主界面上去怎么添加输入框界面呢,此处我们需要对项目进行调试操作在dingdingDylib.m文件中,监听UIApplicationDidBecomeActiveNotification的通知,打印[ UIApplication   sharedApplication ]. keyWindow . rootViewController的根控制器,点击home键让app进入后台,再切回到前台,发现控制台打印的是“ DTTabBarController ”(此处操作均为登录钉钉账号后)
9.png    10.png 11.png

6.利用class-dump操作,查看DTTabBarController 控制器的头文件,选择对“ -( void )viewDidLayoutSubviews”进行hook操作,详情请参考下图,大家也可以选择在别的方法或者控制器上进行hook操作,不一定要选择 DTTabBarController 控制器。
12.png


7.编写经纬度输入框的代码,我选择自定义view操作,右键new file新建一个类ZFXXXButton继承于UIView,详细方法注释请参考图片:
12.png 13.png 14.png 15.png
8.在dingdingDylib.m中导入#import "ZFXXXButton.h"的,对DTTabBarControllerviewDidLayoutSubviews方法进行hook操作:
15.png
9.真机运行dingding项目,不进行经纬度修改,此时我的位置是南山智园,把经纬度修改为天安门广场,修改成功。
16.png 17.png 18.png



以下是源码:
[Objective-C] 纯文本查看 复制代码
#import "ZFXXXButton.h" 
//导入第三方库DingtalkPod
#import "DingtalkPod.h" 
//宏定义屏幕的宽度和高度
#define KScreenHeight [UIScreen mainScreen].bounds.size.height 
#define KScreenWidth [UIScreen mainScreen].bounds.size.width 

[url=home.php?mod=space&uid=402414]@[/url] interface ZFXXXButton() 
//按钮(用于点击弹出经纬度输入框)
@property (nonatomic,strong)UIButton *btn; 
//DingtalkPod对象用于修改经纬度操作
@property (nonatomic,strong)DingtalkPod *pod; 
[url=home.php?mod=space&uid=262062]@End[/url] 

 @ implementation ZFXXXButton 

-(DingtalkPod *) pod{ 
    if (!_pod) { 
        _pod = [[DingtalkPod alloc]init]; 
    } 
    return _pod; 
} 
//懒加载按钮
- (UIButton *)btn{ 
    if (!_btn) { 
        _btn = [UIButton buttonWithType:UIButtonTypeCustom];
        [_btn setTitle "修改经纬度" forState:UIControlStateNormal]; 
        [_btn.titleLabel setFont:[UIFont systemFontOfSize:13]]; 
        _btn.userInteractionEnabled = YES; 
        [_btn addTarget:self action: @selector (btnClick:) forControlEvents:UIControlEventTouchUpInside]; 
    } 
    return _btn; 
} 
//重写initWithFrame:(CGRect)frame方法,把按钮添加到我们自定义的view中
- (instancetype)initWithFrame:(CGRect)frame{ 
    if (self = [super initWithFrame:frame]) { 
//添加按钮
        [self addSubview:self.btn]; 
//设置透明度
        self.backgroundColor = [[UIColor grayColor] colorWithAlphaComponent:0.5]; 
    } 
    return self; 
} 
- (void)layoutSubviews{
    [super layoutSubviews]; 
    CGSize size = self.frame.size; 
//设置按钮在view中的位置
    self.btn.frame = CGRectMake(0, 0, size.width , size .height); 
} 

//点击按钮触发该方法
- (void)btnClick:(UIButton*)btn{ 
    UIAlertController *alert = [UIAlertController alertControllerWithTitle "修改定位" message "请输入经纬度" preferredStyle:UIAlertControllerStyleAlert]; 
    [alert addAction: [UIAlertAction actionWithTitle "取消" style:UIAlertActionStyleDefault handler :^(UIAlertAction * _Nonnull action) { 
    }]]; 
        //点击确定按钮,修改经纬度
    [alert addAction:[UIAlertAction actionWithTitle"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        UITextField *longitudeTextField = alert.textFields.firstObject; 
        UITextField *latitudeTextField = alert.textFields.lastObject; 
        NSLog(@"经度= %@",longitudeTextField.text) ; 
        NSLog(@"纬度= %@",latitudeTextField.text); 
       double longitude = [longitudeTextField.text doubleValue]; 
       double latitude = [latitudeTextField.text doubleValue]; 
        //调用DingtalkPod的setLocation:方法修改经纬度
        [self.pod setLocation:CLLocationCoordinate2DMake(longitude,latitude)]; 
    }]]; 
        //添加经度输入框
    [alert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) { 
        textField.placeholder = @"请输入经度";
        textField.keyboardType = UIKeyboardTypeASCIICapable; 
        textField.returnKeyType = UIReturnKeyDone; 
    }]; 
        //添加纬度输入框
    [alert addTextFieldWithConfigurationHandler:^( UITextField * _Nonnull textField) { 
        textField.placeholder = @"请输入纬度"; 
        textField.keyboardType = UIKeyboardTypeASCIICapable; 
        textField.returnKeyType = UIReturnKeyDone; 
    }]; 
        //弹出经纬度输入框
    [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alert animated:YES completion:nil]; 
} 


# import "ZFXXXButton.h" 
#import "dingdingDylib.h" 
#import <CaptainHook/CaptainHook.h> 
#import <UIKit/UIKit.h>
#import <Cycript/Cycript.h> 
#import <MDCycriptManager.h> 
#import <CoreLocation/CoreLocation.h> 
#define KScreenHeight [UIScreen mainScreen] .bounds.size.height 
#define KScreenWidth [UIScreen mainScreen].bounds.size. width 


CHDeclareClass(DTTabBarController) 

CHOptimizedMethod0(self, void, DTTabBarController, viewDidLayoutSubviews){ 
    //调用y正版钉钉的viewDidLayoutSubviews方法
    CHSuper0(DTTabBarController, viewDidLayoutSubviews) ; 
    //创建ZFXXXButton 
    ZFXXXButton *btn = [[ZFXXXButton alloc]initWithFrame:CGRectMake( (KScreenWidth - 80)/2, 20 , 80, 50)]; 
    //获取DTTabBarController控制器的根控制器的view,把ZFXXXButton添加到view上
    UITabBarController * vc = (UITabBarController*)self;
    UIView *view = vc.selectedViewController.view; 
    [view addSubview:btn]; 
} 

CHConstructor{ 
    CHLoadLateClass (DTTabBarController); 
    CHClassHook(0, DTTabBarController, viewDidLayoutSubviews); 
} 



期待得到小伙伴们的好评和喜欢

免费评分

参与人数 33吾爱币 +34 热心值 +29 收起 理由
横行5g + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
啦啦啦yep + 1 + 1 用心讨论,共获提升!
wstclzy2010 + 1 + 1 谢谢@Thanks!
hyonelin + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
耳食之辈 + 1 谢谢@Thanks!
english1903 + 1 + 1 谢谢@Thanks!
kentish + 1 + 1 鼓励转贴优秀软件安全工具和文档!
pluto217 + 1 + 1 我很赞同!
_as7 + 1 + 1 我很赞同!
你正在输入 + 1 + 1 我很赞同!
myhack + 2 + 1 我很赞同!
15098568903 + 1 + 1 谢谢@Thanks!
iamyrc + 1 + 1 用心讨论,共获提升!
lemon20042004 + 1 + 1 非常感谢大神分享
adj5623125 + 1 + 1 发个成品吧!只有手机没有MAC笔记本啊!
zhczf + 1 + 1 我很赞同!
xiaoguiwucan + 1 + 1 我很赞同!
无痕软件 + 1 + 1 发个成品吧。毕竟有手机,不一定有mac
wangpu96 + 1 + 1 谢谢@Thanks!
小生我也怕怕 + 1 我觉得你可以给我发一个成品过来。
2660409135 + 1 + 1 热心回复!
w291828293 + 1 + 1 我很赞同!
lazyv99 + 1 + 1 谢谢@Thanks!
雨辰ゞ + 1 + 1 谢谢@Thanks!膜拜大佬
安东特大本营 + 1 + 1 我很赞同!
愿此生波澜不惊 + 1 用心讨论,共获提升!
AAAma + 1 + 1 谢谢@Thanks!
chaosgod + 1 我觉得你可以给我发一个成品过来。
hihuhu + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
YXingXing + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zxy20014 + 1 + 1 小白期待成品~
4kfooler + 1 + 1 牛逼,回去试试看
jing8902 + 2 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| zhufeixing 发表于 2018-12-13 14:09
YXingXing 发表于 2018-12-13 14:04
楼主威武,那么快搞了个界面出来

谢谢支持
YXingXing 发表于 2018-12-13 14:04
575253206 发表于 2018-12-13 13:00
wadsq1081 发表于 2018-12-13 13:01
好东西,先收藏着。。。
sxlcc760219 发表于 2018-12-13 13:02
先给楼主点赞,然后慢慢再看
头像被屏蔽
sadie 发表于 2018-12-13 13:04
提示: 作者被禁止或删除 内容自动屏蔽
liu7743889 发表于 2018-12-13 13:04 来自手机
大神,原价市面上的钉钉远程打卡都是来您这抄袭的技术稍加改良居然就能卖钱了!!一个几十块呢!
luojp52pojie520 发表于 2018-12-13 13:05
太复杂了, 一般人不会呀
tanghengvip 发表于 2018-12-13 13:06
真强啊!!!
寒号.鸟 发表于 2018-12-13 13:14
真的需要一定动手能力。
Android app还能搞搞,水果机望而却步
jxcl01036 发表于 2018-12-13 13:37
是否有成品分享啊?谢谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 21:08

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表