【iOS逆向】某App越狱检测

1.目标

此篇文本为入门文章,大家莫抱过多期望。此文章的目的是教大家如何从UI入手,去定位自己想要的东西。

2.操作环境

  • mac系统

  • frida-ios-dump:砸壳

  • 已越狱iOS设备:脱壳及frida调试

  • IDA Pro:静态分析

3.流程

寻找切入点

启动App后,界面如下图:

image-20220912164024604

分析过程

从界面可以看出,App检测到越狱后,会弹出一个弹窗,文案为越狱手机存在安全风险,做iOS开发的都知道,最终这文案显示前,会调用UILabel类的setText:方法。我们trace该方法并打印堆栈:

js代码:

{onEnter(log, args, state) {log(`-[UILabel setText:${new ObjC.Object(args[2])}]`);log('UILabel setText called from:\n' +Thread.backtrace(this.context, Backtracer.ACCURATE).map(DebugSymbol.fromAddress).join('\n') + '\n');},onLeave(log, retval, state) {}
}

关键日志如下:

-[UILabel setText:越狱手机存在安全风险]
UILabel setText called from:
0x1eaa7d0f4 UIKitCore!-[_UIAlertControllerView _updateMessageLabelContents]
0x1eaa756f8 UIKitCore!-[_UIAlertControllerView _prepareMesssageLabel]
0x1eaa750f8 UIKitCore!-[_UIAlertControllerView _prepareViewsAndAddConstraints]
0x1eaa75048 UIKitCore!-[_UIAlertControllerView setAlertController:]
0x1eaa61740 UIKitCore!-[UIAlertController loadView]
0x1ead35ed8 UIKitCore!-[UIViewController loadViewIfRequired]
0x1ead36628 UIKitCore!-[UIViewController view]
0x1ead4ddd4 UIKitCore!-[UIViewController _setPresentationController:]
0x1ead461f4 UIKitCore!-[UIViewController _presentViewController:modalSourceViewController:presentationController:animationController:interactionController:completion:]
0x1ead47ccc UIKitCore!-[UIViewController _presentViewController:withAnimationController:completion:]
0x1ead4a3a8 UIKitCore!__63-[UIViewController _presentViewController:animated:completion:]_block_invoke
0x1ead4a8a4 UIKitCore!-[UIViewController _performCoordinatedPresentOrDismiss:animated:]
0x1ead4a300 UIKitCore!-[UIViewController _presentViewController:animated:completion:]
0x1ead4a560 UIKitCore!-[UIViewController presentViewController:animated:completion:]
0x10128253c App!0xd253c (0x1000d253c)
0x1be344a38 libdispatch.dylib!_dispatch_call_block_and_release

使用frida-ios-dump砸壳后,再使用IDA Pro编译ipa文件。

跳转到内存0x1000d253c位置

image-20220911160319867

再按F5:

__int64 __fastcall sub_1000D24D4(_QWORD *a1)
{void *v1; // x19__int64 v2; // x20void **v4; // [xsp+8h] [xbp-38h]__int64 v5; // [xsp+10h] [xbp-30h]__int64 (__fastcall *v6)(); // [xsp+18h] [xbp-28h]void *v7; // [xsp+20h] [xbp-20h]__int64 v8; // [xsp+28h] [xbp-18h]v1 = (void *)a1[4];v2 = a1[5];v4 = _NSConcreteStackBlock;v5 = 3254779904LL;v6 = sub_1000D2554;v7 = &unk_101A29970;v8 = objc_retain(a1[6]);objc_msgSend(v1, "presentViewController:animated:completion:", v2, 1LL, &v4);return objc_release(v8);
}

查找sub_1000D24D4函数的交叉引用,一层一层往上找,最终找到如下函数:

void __cdecl -[UIViewController cft_presentViewController:presentType:presentCompletionHandler:dismissCompleteHandler:](UIViewController *self, SEL a2, id a3, unsigned __int64 a4, id a5, id a6)
{id v6; // x21id v7; // x20UIViewController *v8; // x24void *v9; // x19__int64 v10; // x20__int64 v11; // x21void *v12; // x0__int64 v13; // x22dispatch_semaphore_t v14; // x23void *v15; // x0void *v16; // x24void *v17; // x0void *v18; // x0void *v19; // x27void *v20; // x0__int64 v21; // x28void *v22; // x0void *v23; // x0void *v24; // x25void *v25; // x0__int64 v26; // x26__int64 v27; // [xsp+8h] [xbp-A8h]void **v28; // [xsp+10h] [xbp-A0h]__int64 v29; // [xsp+18h] [xbp-98h]__int64 (__fastcall *v30)(__int64); // [xsp+20h] [xbp-90h]void *v31; // [xsp+28h] [xbp-88h]__int64 v32; // [xsp+30h] [xbp-80h]__int64 v33; // [xsp+38h] [xbp-78h]__int64 v34; // [xsp+40h] [xbp-70h]UIViewController *v35; // [xsp+48h] [xbp-68h]__int64 v36; // [xsp+50h] [xbp-60h]__int64 v37; // [xsp+58h] [xbp-58h]v6 = a6;v7 = a5;v8 = self;v9 = (void *)objc_retain(a3);v10 = objc_retain(v7);v11 = objc_retain(v6);v37 = 0LL;v12 = objc_msgSend(v9,"aspect_hookSelector:withOptions:usingBlock:error:","viewDidDisappear:",0LL,&off_101A2BF98,&v37);objc_unsafeClaimAutoreleasedReturnValue(v12);v13 = objc_retain(v37);if ( !v13 ){v14 = dispatch_semaphore_create(0LL);v28 = _NSConcreteStackBlock;v29 = 3254779904LL;v30 = sub_1000D23A0;v31 = &unk_101A2BFB8;v32 = objc_retain(v9);v33 = objc_retain(v11);v27 = objc_retain(v14);v34 = v27;v35 = v8;v36 = objc_retain(v10);v15 = objc_msgSend(&OBJC_CLASS___NSBlockOperation, "blockOperationWithBlock:", &v28);v16 = (void *)objc_retainAutoreleasedReturnValue(v15);v17 = objc_msgSend((void *)qword_101F71BF8, "operations");v18 = (void *)objc_retainAutoreleasedReturnValue(v17);v19 = v18;v20 = objc_msgSend(v18, "lastObject");v21 = objc_retainAutoreleasedReturnValue(v20);objc_release(v21);objc_release(v19);if ( v21 ){v22 = objc_msgSend((void *)qword_101F71BF8, "operations");v23 = (void *)objc_retainAutoreleasedReturnValue(v22);v24 = v23;v25 = objc_msgSend(v23, "lastObject");v26 = objc_retainAutoreleasedReturnValue(v25);objc_msgSend(v16, "addDependency:", v26);objc_release(v26);objc_release(v24);}objc_msgSend((void *)qword_101F71BF8, "addOperation:", v16);objc_release(v16);objc_release(v36);objc_release(v34);objc_release(v33);objc_release(v32);objc_release(v27);}objc_release(v13);objc_release(v11);objc_release(v10);objc_release(v9);
}

接下来,同时跟踪UILabel的setText:方法和UIViewController的XXX_presentViewController:presentType:presentCompletionHandler:dismissCompleteHandler:方法,获取到日志如下:

-[UIViewController cft_presentViewController:0x104928e00 presentType:0x1 presentCompletionHandler:0x16ec4e5a8 dismissCompleteHandler:0x16ec4e580]
UIViewController cft_presentViewController called from:
0x1012b9fdc App!+[CFTAlertPresentController presentAlertController:presentCompletionHandler:dismissCompleteHandler:]
0x1012d464c App!-[LaunchingViewController start]
0x1012d3360 App!0x123360 (0x100123360)
0x1be3457d4 libdispatch.dylib!_dispatch_client_callout
0x1be2f3c1c libdispatch.dylib!_dispatch_lane_barrier_sync_invoke_and_complete
0x1012d3310 App!0x123310 (0x100123310)
0x1012b9978 App!0x109978 (0x100109978)
0x1eb76ad1c UIKitCore!-[UIViewAnimationBlockDelegate _didEndBlockAnimation:finished:context:]
0x1eb741a74 UIKitCore!-[UIViewAnimationState sendDelegateAnimationDidStop:finished:]
0x1eb742048 UIKitCore!-[UIViewAnimationState animationDidStop:finished:]
0x1c2e573c8 QuartzCore!CA::Layer::run_animation_callbacks(void*)
0x1be3457d4 libdispatch.dylib!_dispatch_client_callout
0x1be2f3008 libdispatch.dylib!_dispatch_main_queue_callback_4CF$VARIANT$mp
0x1be898b20 CoreFoundation!__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
0x1be893a58 CoreFoundation!__CFRunLoopRun
0x1be892fb4 CoreFoundation!CFRunLoopRunSpecific-[UILabel setText:您的设备不安全]
UILabel setText called from:
0x1eaa7cfe8 UIKitCore!-[_UIAlertControllerView _updateTitleLabelContents]
0x1eaa75544 UIKitCore!-[_UIAlertControllerView _prepareTitleLabel]
0x1eaa750e8 UIKitCore!-[_UIAlertControllerView _prepareViewsAndAddConstraints]
0x1eaa75048 UIKitCore!-[_UIAlertControllerView setAlertController:]
0x1eaa61740 UIKitCore!-[UIAlertController loadView]
0x1ead35ed8 UIKitCore!-[UIViewController loadViewIfRequired]
0x1ead36628 UIKitCore!-[UIViewController view]
0x1ead4ddd4 UIKitCore!-[UIViewController _setPresentationController:]
0x1ead461f4 UIKitCore!-[UIViewController _presentViewController:modalSourceViewController:presentationController:animationController:interactionController:completion:]
0x1ead47ccc UIKitCore!-[UIViewController _presentViewController:withAnimationController:completion:]
0x1ead4a3a8 UIKitCore!__63-[UIViewController _presentViewController:animated:completion:]_block_invoke
0x1ead4a8a4 UIKitCore!-[UIViewController _performCoordinatedPresentOrDismiss:animated:]
0x1ead4a300 UIKitCore!-[UIViewController _presentViewController:animated:completion:]
0x1ead4a560 UIKitCore!-[UIViewController presentViewController:animated:completion:]
0x10128253c App!0xd253c (0x1000d253c)
0x1be344a38 libdispatch.dylib!_dispatch_call_block_and_release-[UILabel setText:越狱手机存在安全风险]
UILabel setText called from:
0x1eaa7d0f4 UIKitCore!-[_UIAlertControllerView _updateMessageLabelContents]
0x1eaa756f8 UIKitCore!-[_UIAlertControllerView _prepareMesssageLabel]
0x1eaa750f8 UIKitCore!-[_UIAlertControllerView _prepareViewsAndAddConstraints]
0x1eaa75048 UIKitCore!-[_UIAlertControllerView setAlertController:]
0x1eaa61740 UIKitCore!-[UIAlertController loadView]
0x1ead35ed8 UIKitCore!-[UIViewController loadViewIfRequired]
0x1ead36628 UIKitCore!-[UIViewController view]
0x1ead4ddd4 UIKitCore!-[UIViewController _setPresentationController:]
0x1ead461f4 UIKitCore!-[UIViewController _presentViewController:modalSourceViewController:presentationController:animationController:interactionController:completion:]
0x1ead47ccc UIKitCore!-[UIViewController _presentViewController:withAnimationController:completion:]
0x1ead4a3a8 UIKitCore!__63-[UIViewController _presentViewController:animated:completion:]_block_invoke
0x1ead4a8a4 UIKitCore!-[UIViewController _performCoordinatedPresentOrDismiss:animated:]
0x1ead4a300 UIKitCore!-[UIViewController _presentViewController:animated:completion:]
0x1ead4a560 UIKitCore!-[UIViewController presentViewController:animated:completion:]
0x10128253c App!0xd253c (0x1000d253c)
0x1be344a38 libdispatch.dylib!_dispatch_call_block_and_release

在XXX_presentViewController:presentType:presentCompletionHandler:dismissCompleteHandler:方法的调用栈,发现[LaunchingViewController start]方法,使用ida pro查看该函数:

void __cdecl -[LaunchingViewController start](LaunchingViewController *self, SEL a2)
{if ( !(~LODWORD(self->_launchAchieveOption) & 0x1FLL) ){v2 = self;self->_launchAchieveOption = 0LL;v3 = ((id (__cdecl *)(GuaTabBarController_meta *, SEL))objc_msgSend)((GuaTabBarController_meta *)&OBJC_CLASS___GuaTabBarController,"shareTabBarController");v4 = objc_retainAutoreleasedReturnValue(v3);v23 = _NSConcreteStackBlock;v24 = 3254779904LL;v25 = sub_100124684;v26 = &unk_101A2BC20;v5 = (void *)objc_retain(v4);v27 = v5;v28 = v2;+[NaviService naviModelWithNaviRoot:withNaviHead:withSourceFrom:ret:](&OBJC_CLASS___NaviService,"naviModelWithNaviRoot:withNaviHead:withSourceFrom:ret:",_NSConcreteStackBlock,3254779904LL,sub_100124684,&unk_101A2BC20);if ( v2->_adDetailDisplayController ){v6 = objc_msgSend(v5, "viewControllers", v23, v24, v25, v26);v7 = (void *)objc_retainAutoreleasedReturnValue(v6);v8 = v7;v9 = objc_msgSend(v7, "objectAtIndexedSubscript:", 0LL, v23, v24, v25, v26);v10 = (void *)objc_retainAutoreleasedReturnValue(v9);objc_msgSend(v10, "pushViewController:animated:", v2->_adDetailDisplayController, 1LL, v23, v24, v25, v26);}v11 = objc_msgSend(&OBJC_CLASS___UIApplication, "sharedApplication", v23, v24, v25, v26);v12 = (void *)objc_retainAutoreleasedReturnValue(v11);v13 = v12;v14 = objc_msgSend(v12, "delegate", v23, v24, v25, v26);v15 = (void *)objc_retainAutoreleasedReturnValue(v14);v16 = v15;v17 = objc_msgSend(v15, "window", v23, v24, v25, v26);v18 = (void *)objc_retainAutoreleasedReturnValue(v17);objc_msgSend(v18, "setRootViewController:", v5, v23, v24, v25, v26);if ( (unsigned int)+[XXXJailBreakJudge deviceIsJailBreak](&OBJC_CLASS___XXXJailBreakJudge,"deviceIsJailBreak",v23,v24,v25,v26) ){v19 = objc_msgSend(&OBJC_CLASS___UIAlertController,"alertControllerWithTitle:message:preferredStyle:",CFSTR("您的设备不安全"),CFSTR("越狱手机存在安全风险"),1LL,v23,v24,v25,v26);v20 = (void *)objc_retainAutoreleasedReturnValue(v19);v21 = objc_msgSend(&OBJC_CLASS___UIAlertAction,"actionWithTitle:style:handler:",CFSTR("确定"),0LL,0LL,v23,v24,v25,v26);v22 = objc_retainAutoreleasedReturnValue(v21);objc_msgSend(v20, "addAction:", v22, v23, v24, v25, v26);+[XXXAlertPresentController presentAlertController:](&OBJC_CLASS___XXXAlertPresentController,"presentAlertController:",v20,v23,v24,v25,v26);}}
}

从函数中可发现越狱检测函数为[XXXJailBreakJudge deviceIsJailBreak]:

bool __cdecl +[CFTJailBreakJudge deviceIsJailBreak](CFTJailBreakJudge_meta *self, SEL a2)
{CFTJailBreakJudge_meta *v2; // x20void *v3; // x0__int64 v4; // x0void *v5; // x0void *v6; // x19void *v7; // x0void *v8; // x22__int64 v9; // x25unsigned __int64 v10; // x26uint32_t v11; // w0uint32_t v12; // w20uint32_t v13; // w21void *v14; // x25const char *v15; // x0void *v16; // x25char v17; // w26_BOOL8 v18; // x20bool result; // w0__int128 v20; // [xsp+0h] [xbp-140h]__int128 v21; // [xsp+10h] [xbp-130h]__int128 v22; // [xsp+20h] [xbp-120h]__int128 v23; // [xsp+30h] [xbp-110h]char v24; // [xsp+40h] [xbp-100h]const __CFString *v25; // [xsp+C0h] [xbp-80h]const __CFString *v26; // [xsp+C8h] [xbp-78h]const __CFString *v27; // [xsp+D0h] [xbp-70h]const __CFString *v28; // [xsp+D8h] [xbp-68h]const __CFString *v29; // [xsp+E0h] [xbp-60h]__int64 v30; // [xsp+E8h] [xbp-58h]v2 = self;v25 = CFSTR("/Applications/Cydia.app");v26 = CFSTR("/Library/MobileSubstrate/MobileSubstrate.dylib");v27 = CFSTR("/bin/bash");v28 = CFSTR("/usr/sbin/sshd");v29 = CFSTR("/etc/apt");v3 = objc_msgSend(&OBJC_CLASS___NSArray, "arrayWithObjects:count:", &v25, 5LL);v4 = objc_retainAutoreleasedReturnValue(v3);v20 = 0u;v21 = 0u;v22 = 0u;v23 = 0u;v5 = (void *)objc_retain(v4);v6 = v5;v7 = objc_msgSend(v5, "countByEnumeratingWithState:objects:count:", &v20, &v24, 16LL, 0LL);if ( v7 ){v8 = v7;v9 = *(_QWORD *)v21;while ( 2 ){v10 = 0LL;do{if ( *(_QWORD *)v21 != v9 )objc_enumerationMutation(v6);if ( (unsigned __int64)objc_msgSend(v2,"permissionForFile:",*(_QWORD *)(*((_QWORD *)&v20 + 1) + 8 * v10),(_QWORD)v20) & 1 ){objc_release(v6);goto LABEL_16;}++v10;}while ( v10 < (unsigned __int64)v8 );v8 = objc_msgSend(v6, "countByEnumeratingWithState:objects:count:", &v20, &v24, 16LL, (_QWORD)v20);if ( v8 )continue;break;}}objc_release(v6);if ( !((unsigned __int64)objc_msgSend(v2, "permissionForFile:", CFSTR("/User/Applications/"), (_QWORD)v20) & 1) ){v11 = _dyld_image_count();if ( !v11 ){
LABEL_14:v18 = getenv("DYLD_INSERT_LIBRARIES") != 0LL;goto LABEL_17;}v12 = v11;v13 = 0;while ( 1 ){v14 = (void *)objc_alloc(&OBJC_CLASS___NSString);v15 = _dyld_get_image_name(v13);v16 = objc_msgSend(v14, "initWithUTF8String:", v15, (_QWORD)v20);v17 = (unsigned __int64)objc_msgSend(v16, "containsString:", CFSTR("MobileSubstrate.dylib"), (_QWORD)v20);objc_release(v16);if ( v17 & 1 )break;if ( v12 == ++v13 )goto LABEL_14;}}
LABEL_16:v18 = 1;
LABEL_17:return v18;
}

结果

1、检测以下路径是否存在:

  • /Applications/Cydia.app
  • /Library/MobileSubstrate/MobileSubstrate.dylib
  • /bin/bash
  • /usr/sbin/sshd
  • /etc/apt

2、如果路径/User/Applications/不存在,检测getenv(“DYLD_INSERT_LIBRARIES”)是否存在

3、如果路径/User/Applications/不存在,检测当前现在在运行的动态库是否包含MobileSubstrate.dylib

End

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28828.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chat-GPT 聚合平台 Poe:集成多个 AI 聊天机器人

Chat-GPT 聚合平台 Poe&#xff1a;集成多个 AI 聊天机器人 介绍 Poe 是知名问答社区 Quora 推出的 AI 平台——开放探索平台 (Platform for Open Exploration, Poe)。Poe 集成了多个基于大型语言模型的聊天机器人&#xff0c;包括 ChatGPT&#xff0c;以及 Sage、Claude、Dr…

越狱手机如何让APP绕过越狱检测

当你越狱之后&#xff0c;某些APP检测到你越狱后&#xff0c;一些功能就会被禁用&#xff0c;比如微信、支付宝的指纹支付&#xff0c;下面这款插件就会帮你绕过越狱检测&#xff0c;正常使用APP里面的所有功能。 文章目录 1. 环境2. Cydia简介3. 过程(Liberty为例)3.1. 添加添…

完美越狱来了,unc0ver 更新 7.0.0 版本,但是别着急冲

说起完美越狱&#xff0c; 仿佛是很久的事情了。 时隔多年&#xff0c;完美越狱终于来了。 Fugu14 完美越狱发布&#xff0c;unc0ver 7.0.0 版本发布。 完美越狱 先说说事情起因、经过、结果。 9月01日&#xff0c;开发者 Linus Henze 演示了 iOS 14.5.1 完美越狱的视频。…

iOS“远程越狱”间谍软件Pegasus技术分析

关注我的博客&#xff0c;访问更多内容&#xff01; 背景&#xff1a;通过研究发现&#xff0c;用户点击短信内的链接后&#xff0c;攻击者就会利用3个0day漏洞&#xff0c;对用户手机“远程越狱”&#xff0c;然后安装间谍软件&#xff0c;随后就能对设备进行全面控制&#x…

20、Theos越狱调试Wallet

前面的总结中使用砸壳重签后的App进行调试,本篇在越狱环境下不重签App进行调试,但是还是需要砸壳获取Headers. 一、Cycript 1.1 在越狱环境中使用Cycript 在越狱环境上,安装Cycript插件.需要先安装adv-cmds插件,因为被Cycript插件所依赖、在Cydia中,安装Cycript 在设备中找到…

用上这几个开源管理系统做项目,领导看了直呼专业!

大家好&#xff0c;我是宝哥&#xff01; SCUI Admin 中后台前端解决方案 SCUI 是一个中后台前端解决方案&#xff0c;基于 VUE3和 elementPlus 实现。使用最新的前端技术栈&#xff0c;提供各类实用的组件方便在业务开发时的调用&#xff0c;并且持续性的提供丰富的业务模板帮…

chatgpt赋能python:用Python自动答题,助你轻松应对各种考试

用Python自动答题&#xff0c;助你轻松应对各种考试 Python作为一门高效简洁的编程语言&#xff0c;被广泛运用于数据分析、Web开发等领域。同时&#xff0c;它也可以被用来进行自动化任务&#xff0c;例如自动化答题。这篇文章将介绍如何用Python自动答题&#xff0c;并提供一…

7分钟环游地球!ChatGPT开启时空传送门,输入地址一秒穿越

v 新智元 新智元 2023-05-20 21:27 发表于北京 新智元报道 编辑&#xff1a;桃子 拉燕 【新智元导读】7分钟环游世界&#xff0c;还是坐在家里的那种。 环游世界&#xff0c;或是很多人梦寐以求的人生。 无奈&#xff0c;身为打工人&#xff0c;又有多少人能真正得偿所愿。…

一文读懂什么是chatGPT

第一章&#xff1a;chatGPT是什么 ChatGPT是一种基于语言模型的对话生成系统。它是由OpenAI开发的&#xff0c;通过训练大规模的神经网络模型来实现。ChatGPT可以接收用户的输入&#xff0c;并生成与之相关的自然语言回复。它可以用于各种对话场景&#xff0c;如客户服务、虚拟…

今天,GPT-4登陆Office全家桶,打工人的生产方式被颠覆了

点击上方“3D视觉工坊”&#xff0c;选择“星标” 干货第一时间送达 作者丨机器之心 编辑丨3D视觉工坊 点击进入—>3D视觉工坊学习交流群 未来和 AI 一起工作是这样的。 「用人工智能重塑生产力」&#xff0c;微软老早就在 3 月 16 日活动主题上为我们打了预防针&#xff0c…

AI 工具合辑盘点(六)持续更新

AI 图像生成和编辑工具 不久前&#xff0c;艺术创作是特定群体的领域。 不再是这样了&#xff01; 今天&#xff0c;在人工智能艺术生成器的帮助下&#xff0c;任何人都可以通过编写文本提示并让人工智能创建所需的图像来成为艺术家。 &#x1f3a8;&#x1f58c; 文本到图像…

AIGC技术盛行之后引起的影响

前言 虽然人工智能一直都是近几年的热门技术和话题&#xff0c;但是今年技术圈被AI刷爆了&#xff0c;前有chatGPT&#xff0c;后有AIGC&#xff0c;可以说最近的技术圈很热闹。这里先抛开chatGPT不提&#xff0c;就说说AIGC&#xff0c;AIGC其实就是利用人工智能技术来生成内容…

微软元宇宙「大撤退」,VR/AR多个团队原地解散!全心押宝ChatGPT

2023年开年第一波大裁员&#xff0c;微软重创手下VR/AR团队。有了「新宠」ChatGPT&#xff0c;手中的「元宇宙」真的不香了。 元宇宙有多热&#xff0c;我们在2021年都见证过。 而经过2022年的洗礼&#xff0c;这一概念似乎已经完全冷却下来。烧掉360亿美元后&#xff0c;小扎…

【AI人工智能】AI绘画能取代设计师?

图来自:https://www.nytimes.com/2022/09/02/technology/ai-artificial-intelligence-artists.html 近期智能AI话题爆火,前有ChatGpt,现又出现了一个AI绘图工具Midjourney,号称没有美术基础的人也能快速上手制作出漂亮的图像。也有不少声音表示设计师都要失业了。AI绘图工…

Python开源项目周排行 2023年第10周

​原文地址&#xff1a;2023年第10周- Python学习网站导航 #2023年第10周2023年3月25日1ChatPaper使用 ChatGPT来总结论文。AI用一分钟总结论文&#xff0c;用户用一分钟阅读AI总结的论文。2川虎 ChatGPT为ChatGPT API提供了一个轻快好用的Web图形界面3transformersTransformer…

GDI+下字体大小自适应方案初探

在某个瞬间&#xff0c;我忽然发觉&#xff0c;三体或是AI&#xff0c;本质上是非常相近的事物&#xff0c;甚至在面对任何未知领域的时候&#xff0c;人类总会不自觉地划分为降临派、拯救派和幸存派。姑且不论马斯克等人叫停 GPT-5 的真实动机如何&#xff0c;当大语言模型(LL…

超实用攻略!GPT能玩的这么6,你居然还不知道?

开篇 自古以来,智者皆知学无止境,而在我们身边,正有一款奠基于这个原则的AI机器人—ChatGPT,他擅长从网络上学习各种知识,然后把这些知识用在他的对话中。没错,它就是天马行空的闲话家,无所不谈的取经者。可你知道怎样让它更加符合你的使用需求,适应你的工作节奏么?哦…

基于本地知识库的问答机器人langchain-ChatGLM

原文&#xff1a;基于本地知识的问答机器人langchain-ChatGLM - 知乎 背景 ChatGPT火了后&#xff0c;各种大语言模型&#xff08;LLM&#xff09;模型相继被发布&#xff0c;完全开源的有ChatGLM、BLOOM、LLaMA等。但是这些模型学到的知识是滞后的&#xff08;比如ChatGPT的…

诞生的新职业——提示工程师,年薪已经达到了25万-33万美元

提示工程&#xff0c;可以说是玩转ChatGPT、DALLE 2等等这类AI模型的「必修课」。 但这个「提示」&#xff08;prompt&#xff09;具体要怎么写&#xff0c;多少都有些玄学在里面…… 也难怪由此诞生的新职业——提示工程师&#xff0c;年薪已经达到了25万-33万美元。 就在前不…

安全运营场景下的语言模型应用

接上篇&#xff0c;将安全运营的定义为“使用算法能力提取关键信息”&#xff0c;以此来规避算法误判漏判带来的责任问题&#xff0c;同时提升运营人员的工作效率。在这篇尝试对语言模型的使用方法做一下讨论和分享。 1. 语言模型 先聊一下语言模型。&#xff08;这里刻意规避…