专利申请

专利申请

app 能申请专利吗?(APP不能申请实用新型)

将APP里面涉及到的技术整理成数据处理和交互过程中的方法步骤,可以申请发明。

APP本身为软体,不能像具有实际形态和结构的设备或者机械装置那样予专利保护这个产品本身。APP不能申请实用新型,APP的UI界面以前不可以予外观设计保护,现在政策有变,正在征求意见,可能以后可以。

在APP做出来之前完全可以申请专利,即使是产品发明,也不要求有实际产品,有构想就行。相反,做出产品再申请则有可能不能申请,会影响其新颖性不被授权。2009年1月,国家知识产权局就“商业方法专利的审查方式”作出尝试性规范,但由于缺少法律的明确定位,对于社会普遍关心的“APP能否申请专利,以及如何申请专利”等重要问题并没有给予准确回答。为此,国务院在2015年6月份出台的《关于大力推进大众创业万众创新若干政策措施的意见》,将“研究商业方法等新形态创新成果的知识产权保护”列入当前亟待解决的重要问题。这就是关于您问题的相关法律。

APP可以申请专利吗

以下内容摘自:APP可以申请专利吗

APP是可以申请专利的,APP的商标,著作权和专利都可以获得保护。不管是版权法还是商标法,都不能保护APP的核心功能,因此开发者们开始寻求专利的保护,试图通过专利来保护APP的核心思想和功能。那么APP如何申请专利呢?

  一、专利申请的对象

  由于专利法对专利的保护对象有着明确规定,因此并非所有的APP软件的方案都可以申请专利。例如,游戏等类似规则定义的APP,但这也并不意味着游戏APP根本无法获得专利, 我们仍然可以挖掘出可以申请专利的内容。比如,游戏里涉及到APP与服务器之间的交互,该交互的技术方案就可以申请专利;再比如,游戏里涉及到内存管理等提高性能的技术方案、数据库处理方案等,都可以申请专利。

​ 二、专利申请的实质要求

  所有的内容都可以申请专利,但是所有的申请不会全部授权。这里提到的要求是指获得授权的要求,有三个要点:实用性,新颖性和创造性。

  1.实用性:指申请专利的发明创造能够制造或使用,并且能够产生积极效果。

  2.新颖性:指该发明创造不属于现有技术;也没有任何单位或者个人就同样的发明或实用新型在申请日以前向向国务院专利行政部门提出过申请,并记载在申请日以后公布的专利申请文件或者公告的专利文件中。

  3.创造力:指所要求保护的技术方案相比于现有技术,具有突出的实质性特点和显著的进步。例如,您对微信进行了一些改进,并且这种改进是显而易见的。

  三、专利申请符合条件

  申请专利时,无需已经编写完APP的代码,只需设计出一个方案即可。通常,只要您的设计细节满足会编程的程序员可以编写出APP的要求时,就可以申请专利。

利:知识产权、融资

可口可乐,不申请专利,用户保护自己的专有技术

发明、实用新型专利、外观设计专利

图片优化:数据万象及其阶梯+底层库处理(CachedNetworkImage\ExtendedImage)

音频优化:降噪增益(火山)

视频优化:点播、直播、切片缓存(腾讯云超级播放器)

网络优化:缓存

体验优化:更多的细节处理,数据携带、缓存

webView优化:白屏、单控制器等

文件传输优化:断点续传

Global数据优化:避免多次获取、默认数据

直播:推流、拉流

打赏动画播放优化:svga、vap选择

Cocos2d:

初审:文档内容格式的基本要求

Android反编译

工具下载:

参考文章:

类型 位置 方法
资源文件 res目录下 直接修改 xxx.apk的后缀为 xxx.zip
AndroidManifest.xml 使用apktool解压
代码 apktool解压后,dex2jar + jd-gui

一、资源文件

方法:修改 xxx.apk的后缀为 xxx.zip

二、图片布局

工具安装简述

1、apktool

mac 建议使用红框中的 Homebrew 去安装,执行 brew install apktool 命令一键安装,它会自动给你配置好环境变量以及增加文件的操作权限

1
brew install apktool

反编译apk

执行命令

1
2
# 解压
apktool d -f $OriginPath -o $ChannelHome/origin_apk
  • ddecode的简写
  • -f/--force:强制删除目标文件夹,即会先清空$ChannelHome/origin_apk,然后再执行decode操作
  • $OriginPath是当前要反编译的apk
  • -o--output的简写,代表输出路径

2、安卓反编译(三):dex2jar 和 JD-GUI 工具

3、jadx

4、ghidra

其他工具

Flutter开发的Android应用:Doldrums:功能强大的逆向工程分析工具 项目地址
Doldrums:https://github.com/rscloura/Doldrums

iOS的重签名

一、重签名前后

1、支持重签名的文件及其获取方法

支持重签名的文件类型有 appName.app appName.xcarchive appName.ipa

image-20240305155525998

文件获取方法(附:跑给真机的,会多出一个 embedded.mobileprovision 文件

文件类型 获取方式 获取注意点
appName.app 方法1:可以直接通过build获得
方法2:Product -> Archive -> 查看包内容 -> Products/Applications/xxx.app
如果是要给真机安装,则build时候应该选真机(如Any iOS Device)。
(从pp助手等平台下载的肯定是针对真机的)
否则重签名安装后无法正常打开
appName.xcarchive Product -> Archive
appName.ipa Product -> Archive -> 查看包内容 -> Products/Applications/xxx.app

测试时候自己给自己提供上述文件的方法如下:

1、选择类型

appName.app的获取

2、Build + Show in Finder

image-20240305160952217

3、得到 embedded.mobileprovision 描述文件

embedded_in_finder

1、描述文件 embedded.mobileprovision 内容的查看

标准方法:

1
$ security cms -Di embedded.mobileprovision

其他方法:不能使用Sublime Text打开,因为只能看到一堆二进制数据。可以在Mac上直接空格预览文件。

其中的有效内容示例:

img

2、提取描述文件 embedded.mobileprovision 内容生成签名需要的 entitlements.plist

2.1、方法1:直接copy

利用Xcode新建一个plist文件,以代码形式打开plist文件(open As->Source code)并粘贴相应内容。

2.2、方法2:使用脚本

脚本见:《get_entitlements_plist_file_from_embedded_mobileprovision_file.sh

脚本的使用见:《resign_ipa.sh

1
2
3
4
5
6
7
8
# 新证书授权文件(可以从本地可以真机安装的APP中通过显示包内容来看到)
RESIGN_NEED_MOBILEPROVISION_PATH="/Users/qian/Documents/重签名/TSDemoDemo.app/embedded.mobileprovision"
# 从 embedded.mobileprovision 获取生成签名需要的 entitlements.plist
# RE_SIGN_NEW_ENTITLEMENST="$SRCROOT/new_entitlements.plist"
RE_SIGN_NEW_ENTITLEMENST="/Users/qian/Documents/重签名/plist_from_mp.plist"
sh "$CurrentDIR_Script_Absolute/get_entitlements_plist_file_from_embedded_mobileprovision_file.sh" \
-embedded_mobileprovision_F "$RESIGN_NEED_MOBILEPROVISION_PATH" \
-entitlements_plist_hope_path "$RE_SIGN_NEW_ENTITLEMENST"

2、重签名结果的使用/将ipa安装包安装到app上

重签名后得到新签名的ipa文件。

方式1:拖动ipa到已连接到Xcode的手机应用里

如下图拖动ipa到已连接到Xcode的手机应用里即可。

image-20240305162715242

二、重签方式

方式 将 可用项目的数据 –> 放进 –> 要重签的项目 将 要重签的项目 –> 放进 –> 可用项目(推荐)
主要说明 embedded.mobileprovision 获取以下信息
1、替换要重签的embedded.mobileprovision
2、获取数据并生成签名需要的 entitlements.plist
3、获取数据并修改签名必须保持一致的 bundle id
1、扔进可用项目后,修改要重签的app的bunle id
签名其他 Framework 同左
好处 只需在重签项目中对各值进行修改/签名。 可通过运行可用项目,并在BuildPhases内添加脚本,
从而进行调试
示例1 iOS逆向 应用重签名+微信重签名实战 IOS代码注入APP&重签实战
示例2 教你实现一个 iOS 重签名工具

三、重签名脚本实现

1、将 要重签的项目 –> 放进 –> 可用项目(推荐)

自己的项目: https://github.com/dvlpCrack/app_resign_box.git app重签的工具盒(将要重签的app放入此盒即可重签)

该项目中包含 appSign.sh 脚本

2、将 可用项目的数据 –> 放进 –> 要重签的项目

自己的脚本代码: sign/resign_ipa.sh

四、重签名工具

1、重签名工具 ios-app-signer

使用介绍

1、界面如图

ios-app-signer_01

2、支持重签名的文件类型有 appName.app appName.xcarchive appName.ipa

点击链接,跳转到上文查看 支持重签名的文件及其获取方法

3、自定义新的appid、名字和版本号等,点击Start即可进行重签名ipa安装包。

image-20240305162226932

4、将ipa安装包安装到app上:

点击链接,跳转到上文查看 将ipa安装包安装到app上

五、免证书的重签名工具

免证书的重签名工具:sideloadly

它和 iOS App Signer 的区别如下。

序号 特性 Sideloadly iOS App Signer
1 适合场景 无证书情况下,安装三方ipa 有证书情况下,将打包好的设备直接重签给其他测试设备,省去重新打包的耗时过程
2.1 使用门槛 低,只需一个Apple ID ,必备开发者证书描述文件 (Provisioning Profile)
2.2 能安装的设备 绑定到“Apple ID + 设备序列号(UDID)”,只有一台设备 绑定到“证书 + 描述文件”,能安装到该描述文件里列出的设备列表
3.1 核心功能 签名 + 安装,一条龙服务 仅签名,生成一个已签名的IPA文件
3.2 操作流程 选择IPA → 连接手机 → 输入Apple ID → 自动安装到手机 选择IPA → 选择证书 → 点击生成 → 得到一个IPA文件 (装手机还需其他工具,如爱思助手)
3.3 电脑连接手机 需要,用于直接安装 不需要,可以离线批量处理IPA文件
4 操作系统 Windows 和 macOS 仅 macOS
5 主要用户 想要安装第三方应用或修改版App的普通用户 需要批量处理、研究应用签名机制的开发者或极客

一门APP证书制作工具

iOS上的几种注入动态库的方式

项目实践:一个进入app需要密码的动态库:《https://github.com/dvlpCrack/CQAppPassword_dylib.git》

其他参考文章:iOS上的几种注入动态库的方式

iOS逆向

一、获取ipa(可跳过)

如何从App Store下载.ipa文件

提取 ipa

1
open /Users/qian/Library/Group\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps

二、获取砸壳ipa

https://ipadump.com/

https://ipadump.com/ 已重置 ¥8 (砸壳 ¥0.01)
https://armconverter.com/ Free
https://decrypt.day/ 免登录下载,修改id即可
https://decrypt.day/app/id967805235

Xcode高版本新建项目后找不到Products目录怎么办?

开project.pbxproj文件找到productRefGroup,将mainGroup值复制到productRefGroup保存即可

三、动态库

动态库是一种可在运行时加载和链接的库文件,它可以被多个应用程序共享。与静态库相比,动态库的最大优势是可以在不重新编译整个程序的情况下进行更新和替换。在iOS开发中,动态库广泛应用于插件化开发、代码重用和功能扩展等方面。

示例:wechat-tweak 微信小助手

1、制作动态库Library(dylib)

1、创建项目

Xcode –> New –> File –> Project –> macOS –> Library

dylib_create_01

2、选择库的框架和类型

Framework –> None(Plain C/C++ Library)

Type –> Dynamic

在创建macOS的Library的时候,当Framework选项时,有Cocoa、STL、None,请问这几种有什么区别?

Cocoa STL(C++ Library) None(Plain C/C++ Library)
选择 Cocoa 时,你将创建一个使用 Cocoa 框架的 macOS Library。Cocoa 是 macOS 上的主要应用程序开发框架,它基于 Objective-C 和 Swift 编程语言。Cocoa 提供了许多用于构建 macOS 应用程序的类和 API,包括图形用户界面、事件处理、数据存储、网络通信等功能。 STL(C++ Library)是一种 C++ 标准库,提供了一套模板类、算法和迭代器,用于在 C++ 中进行通用编程。然而,在 macOS 中,没有直接提供名为 STL 的选项。STL 在 macOS 上可以通过使用 C++ 编译器和标准库来使用,而不需要特定的框架选项。 选择 None 时,你创建的是一个不依赖特定框架或库的 macOS Library。这意味着你可以自由选择使用其他库或框架,或者根据需要在库中进行自定义代码编写。
dylib_create_02

3、添加文件和代码(下面以测试功能和代码为例)

①、使用 extern "C" 宏来定义 C 函数的声明,以确保它们按照 C 语言的命名和调用约定进行编译。

②、.m 文件修改为 .mm 格式,以支持C++编译

dylib_code_01

4、编译和获取dylib动态库

①、选择你的库要编译为什么SDK。(如给iPhone使用,选择iOS)

②、编译出的库要给什么类型的机器使用。(如iOS模拟器使用Any iOS Simulator Device、真机使用Any iOS Device+证书)

dylib_code_02

执行 Commond+B 进行编译后,标记③的dylib将由红色变成黑色,即表示生成了dylib。

附:如果你在Xcode15上,找不到Products目录,可打开 .xcodeproj –> 右键显示包内容 –> .pbxproj –> 搜索mainGroup,将mainGroup的值覆盖productRefGroup的值 –> 之后保存文件即可。

编译结果如下:

dylib_code_03

至此,我们的动态库编译生成完成。

2、动态库的使用

1、动态库的添加

1.1、在 Build Phases 的 Link Binary With Libraries 中添加我们的动态库,这里我们采用拖动的快捷方式。

dylib_add

此步的作用是为了

1.2、还需要将dylib添加到app根路径下(其他有些也会注入到Frameworks路径下)

dylib_add_02

执行完上述步骤之后,我们再次编译生成app,进而通过MachOView,即可看到我们的库成功注入了。

附:更多注入方法查看:iOS逆向 11:代码注入(上) yololib

dylib_add_03

2、动态库的调用

我们在main方法中进行测试,验证得到所编译的动态库有效。

dylib_use_01

3、动态库功能的完善开发

1、引入pod时候,

如果使用 #use_frameworks! ,则应该设置为 use_frameworks! :linkage => :static 。否则当你在动态库中引入了一个在app中不存在的库的时候大概率会出现错误。

4、动态库的自动执行/动态库在逆向中的使用

1、执行动态库的方法

序号 方法描述 示例 缺点
1 外界在适当位置调用动态库中的方法 main中调用test_dylib(); 调用的代码过多,逆向不适合在原代码中写
2 将方法写在动态库NSObject的+load中 NSObject+CQCrack 容易覆盖掉app中NSObject自身的+load方法
3 将方法写在动态库注入时自动执行的+load中 完美!!!✅

入职指引

新人入职

新人入职:

wifi:<公司 wifi>

使用公司邮箱注册以下账号:
① 企业微信
② wiki(公司内部知识库)
③ gitlab(项目代码仓库)

代码git workflow

稳定分支:master

开发分支:development

测试分支:dev_all(所有的测试功能,可能有100个,但只有几个是测试通过可以上线的)

公测功能分支:dev_publish_out

内测功能分支:dev_publish_in(拉取自development)

功能分支:feature,需 rebase development,合并且development有变更时候

修复分支:hotfix

正常的异常现象汇总

序号 现象 出现场景罗列 对外原因说明 对内技术说明 相关文档链接
1 IOS16粘贴自MacBook的弹窗无法关闭点击取消也无法关闭 使用“通用剪贴板”功能时遇到了异常的情况。 强制重新启动 iPhone。 iOS16系统问题。可重启解决。 苹果系统问题 https://discussionschinese.apple.com/thread/254336327
2 由于应用 universal link 校验不通过 偶发跳转到微信提示“由于应用 universal link 校验不通过” 网络抖动,重试即可。 去官网下载apple-app-site-association的时候超时了。 1. app首次安装打开iOS会从官网获取配置文件。(系统层操作) 2. 跳转到微信,微信也会从官网获取配置文件。(微信操作) 3. 微信通过配置文件对app进行校验。 以上1、2步骤中获取配置文件会有缓存,apple、微信对配置文件都有自己的策略(未公开)。 官网文件:https://app.xxx.com/apple-app-site-association
3 进行游戏直播,在app中播放发现掉帧 进行游戏直播,在app中播放发现掉帧 推流问题。排查方案见右侧文档 app自身直播排查方案

Git获取信息

一、获取commit信息:

1、获取指定分支最后一次提交的信息

1
2
3
Git获取信息
# 获取指定分支最后一次提交的作者
git show --format=%aN -b origin/dev_all -s

2、获取指定分支最后一次提交的信息–本地

我想可以获取到远程origin/shop_report分支的最后一次提交作者,但是我又不想说必须得去拉取到本地,请问我该怎么处理

如果您不想将 origin/shop_report 分支拉取到本地仓库中,您可以尝试使用以下命令来获取该分支的最后一次提交的作者名字:

1
git ls-remote --heads origin dev_all | cut -f 1 | xargs -I {} git show --format=%aN {} -s | head -n 1

该命令将会首先使用 git ls-remote 命令获取 origin/shop_report 分支的引用头(ref),然后使用 cut 命令提取该引用头的哈希值。接着,使用 xargs 命令将该哈希值作为参数传递给 git show 命令,并使用 --format=%aN 参数指定输出作者名字。最后,使用 head 命令提取第一行输出,即为该分支的最后一次提交的作者名字。

请注意,这种方式虽然可以不将 origin/shop_report 分支拉取到本地仓库中,但是每次执行该命令都会从远程仓库中获取该分支的引用头和最后一次提交的作者信息,因此速度可能较慢,特别是在网络条件不好的情况下。如果您需要频繁地获取 origin/shop_report 分支的最后一次提交的作者信息,建议还是将该分支拉取到本地仓库中。

1、git 查看远程分支

要查看远程分支,可以使用以下命令:

1
git branch -r

该命令会列出所有远程分支的列表,以remotes/为前缀。如果你想查看特定的远程分支,可以使用以下命令:

1
git branch -r | grep <remote-branch-name>

其中,<remote-branch-name>是指你要查看的远程分支名称,这个命令会查询匹配远程分支名称的所有分支,然后在终端输出它们的名称。

2、远程删掉了,但本地执行git branch -r 还是显示出来

2.1、git remote prune origin

如果你在远程删除了一个分支,但是本地执行git branch -r命令仍然显示该分支名,这可能是因为本地的远程分支列表缓存了该分支名。为了解决这个问题,你可以执行以下命令来更新本地的远程分支列表:

1
git remote prune origin

该命令会从远程 Git 仓库中删除已经不存在的分支,并更新你本地的远程分支列表。执行完这个命令后,再次执行git branch -r,就应该不会再看到已经被删除的分支名了。

2.2、git remote prune origin 执行出错了

如果git remote prune origin命令执行出错了,很可能是由于你的本地缓存信息有问题,请执行以下操作修复问题:

  1. 首先,运行以下命令来更新远程分支缓存:
1
2
# 这个命令会强制更新缓存,在更新过程中删除远程不存在的分支,然后更新你本地的远程分支列表
git remote update origin --prune

如果上述命令没有解决问题,你需要手动清除本地缓存。

1
2
3
4
5
6
7
8
9
# 这个命令会从远程 Git 仓库中下载所有最新的分支,同时删除远程不存在的分支,然后更新本地分支列表。
git fetch --all --prune

# 如果上述命令仍然无法解决问题,你可以尝试处理该git工程下的 .git/refs/remotes 文件夹
# 尝试方式1:手动删除指定分支

# 尝试方式2:删除所有本地缓存目录并重新克隆仓库。
rm -rf .git/refs/remotes
git clone <repository-url>

End