Giter Club home page Giter Club logo

abcz316 / skroot-linuxkernelroot Goto Github PK

View Code? Open in Web Editor NEW
2.4K 59.0 643.0 15.28 MB

新一代SKRoot,挑战全网root检测手段,跟面具完全不同思路,摆脱面具被检测的弱点,完美隐藏root功能,全程不需要暂停SELinux,实现真正的SELinux 0%触碰,通用性强,通杀所有内核,不需要内核源码,直接patch内核,兼容安卓APP直接JNI调用,稳定、流畅、不闪退。

Makefile 0.03% C++ 94.41% C 4.47% Java 0.99% CMake 0.05% Batchfile 0.06%

skroot-linuxkernelroot's Introduction

SKRoot - SuperKernelRoot - Linux内核级完美隐藏ROOT演示

新一代SKRoot,挑战全网root检测手段,跟面具完全不同思路,摆脱面具被检测的弱点,完美隐藏root功能,全程不需要暂停SELinux,实现真正的SELinux 0%触碰,通用性强,通杀所有内核,不需要内核源码,直接patch内核,兼容安卓APP直接JNI调用,稳定、流畅、不闪退。

功能列表:

1.测试ROOT权限

2.执行ROOT命令

3.执行原生内核命令

4.安装部署su

5.注入su到指定进程

6.完全卸载清理su

7.寄生目标APP

效果:

  • 实验设备包括:红米K20\K30\K40\K50\K60、小米8\9\10\11\12\13、小米平板5\6、红魔5\6\7、联想、三星、一加、ROG2\3等,支持型号非常多。测试结果显示,SKRoot能够在所支持设备上非常稳定的运行。
  • 过市面上所有主流APP的ROOT检测,如农业XX、交X12XX3等...
  • 无需理会谷歌GKI
  • 让所有的ROOT检测手段都回归尘土吧,愿世界迎来一个美好的ROOT时代!

image image image

功能备注:

1.APP应用程序拿到ROOT权限的唯一方法就是得到ROOT密匙,此密匙为48位的随机字符串,安全可靠。

2.其中【注入su到指定进程只支持授权su到64位的APP,老式32位APP不再进行支持,因市面上几乎所有APP都是64位,例如MT文件管理器、Root Explorer文件管理器等等。

使用流程:

1.将内核文件拖拽置patch_kernel_root.exe即可一键自动化流程补丁内核,同时会自动生成ROOT密匙。

2.编译并启动PermissionManager或者testRoot,输入ROOT密匙值,开始享受舒爽的ROOT环境。

更新日志:

2.0:

  • 1.新增seccomp补丁代码
  • 2.新增寄生目标功能
  • 3.新增一键自动化流程补丁内核功能
  • 4.修复Linux 3.X老内核兼容问题
  • 5.修复Linux 5.10、5.15无法开机问题

问题排查:

如发现第三方应用程序依然有侦测行为,请按照以下步骤进行排查:

  • 内核必须保证是基于官方原版进行修改,而非自行编译或使用第三方源码编译。
  • 如果你曾经使用过Magisk,你应该先将手机完全刷机,因为Magisk可能会残留日志文件等信息。
  • 不要安装需要ROOT权限的工具,或涉及系统环境检测的应用,如冰箱、黑洞、momo和密匙认证等。这些应用的存在可能会被用作证据,推断你的设备已获取ROOT权限。以冰箱为例,这款应用需要ROOT权限才能运行,如果你的设备上安装了冰箱,那就可能被用来佐证你的设备处于ROOT环境。实际测试中我们发现,"X租号"APP就会进行此类环境检测。因此,我们强烈建议不安装这些工具。若确需使用,请在使用结束后立即卸载,以降低异常环境判断风险。
  • Android APP应用可能会被检测其特征。这里我们仅提供APP调用的教学,在实际使用中,请尽量隐藏应用。可以考虑使用寄生功能,即将你的应用功能嵌入或附加到另一个无害或常见的应用内,这样可以有效地避免检测。如果这仍然不能满足隐藏的需求,你还可以考虑卸载应用,改用纯命令行方式调用的testRoot.cpp。
  • 在老旧版本的Android系统中,应用程序无需任何权限即可访问/data/local/tmp目录。在这种情况下,你应该升级Android系统版本,或者卸载SU。
  • 如果你的手机在解锁后会发出警报,你需要自行解决这个问题,因为它与SKRoot无关。
  • 检查应用程序是否在检测Bootloader锁,而不是ROOT权限。如果是这样,你应该安装SKRoot的隐藏Bootloader锁模块。
  • 请检查SELinux状态是否被恶意软件禁用。

skroot-linuxkernelroot's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

skroot-linuxkernelroot's Issues

向service manager发送请求依然被selinux拦截

04-22 07:54:28.411 467 467 E SELinux : avc: denied { find } for service=window pid=2848 uid=0 scontext=u:r:untrusted_app:s0:c102,c256,c512,c768 tcontext=u:object_r:window_service:s0 tclass=service_manager permissive=0
请问大佬,为何这个操作依然被selinux拦截?

三星 android 8.0 kernel 3.18 修改后卡开机logo无限重启

测试hook 挑战过去什么不操作在跳转回来是可以开机的
patch_kernel_root 后就无法开机了,
单独hook path_do_execve 或者 path_avc_denied 都无法开机
是因为我内核版本太低了吗?

do_execve 141E58
avc_denied 293750
cred 668
seccomp AD8
cred 是 get_task_cred 里面 0x660 + 8
函数入口是直接打印了内核符号表看到的

感谢大佬

请问可以放个第四步的patch_kernel_root.cpp的exe嘛,我编译遇到了Error: immediate offset out of range

一个很旧的内核cred偏移值无法确定

你好,我的设备是小米mix2,内核为linux4.4.153-perf+,aarch64架构,解压获得的boot,ida加载起始地址FFFFFF8008080000
boot.zip
通过ida搜索函数do_execve得到入口地址FFFFFF80081C83F4(减去起始地址为0x1483f4)
do_execve
通过ida搜索函数avc_denied得到入口地址FFFFFF80082E20D0(减去起始地址为0x2620d0)
do_execve
通过搜索task_struct并没有得到我想要的cred偏移值,通过拖拽内核的方法并未得到任何结果,通过搜索proc_pid_status函数从伪代码中仍旧无法得到Uid的值,可以得到seccomp的值(0x858)
Uid
seccomp
通过一些合理的猜测cred的值进行测试,手机不能正常开机。

添加的汇编代码的意义

请问能否大致解释下添加的汇编代码的意义?感觉明白为什么要添加这些代码,能更好的自己查错解决

大佬您好

我的手机是小米6x,从官方的9.0刷机包提取的boot,并且函数定位我是导出的手机里的符号文件,使用ida脚本批量设置函数,然后把每个需要的偏移地址拿到,并且补丁后我也用ida看了,感觉hook也在正确的位置上,但是打包刷入后,使用管理器检测root权限时手机就重启了,请问我应该排查哪里的问题?

😂

两年了还没发布吗?

请教,三星 cred 写入后 死机自动重启, 是触发了RKP保护吗?

<< "LDR X10, [X8, #" << task_struct_offset_cred << "]" << endl
<< "MOV X7, #4" << endl
<< "MOV W9, WZR" << endl
<< "STR W9, [X10, X7]" << endl
您好,请教下, cred + i * 4 写0,就会导致死机自动重启
我测试目前可以正常开机,rootkey校验正常, 点击测试root就会死机重启
我搜索到RKP好像对cred有保护,请教下是因为写cred触发了保护机制吗?

请教 cred的偏移怎么取

ida 跳转过去以后
real_cred = ((__int64 (__fastcall *)(__int64))loc_3E768)(task);

v25 = *(_DWORD *)(real_cred + 0x14);

sub_155D0C(a1, "Seccomp:\t%d\n", *(unsigned int *)(task + 0xAD8));

Seccomp 应该是0xAD8吧?
Cred 怎么取啊?

missing file

Cannot find source file:

  ../../../../../testRoot/process64_inject.cpp

Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
.hxx .in .txx

大佬好,可以看下我这个内核为什么找不到do_execve吗

大佬好,附件在:
123pan:https://www.123pan.com/s/w51tVv-QGe6d.html
google:https://drive.google.com/file/d/15X6V9_N0m592f-A-elEEH1gqCZvUpjG4/view?usp=sharing

固件是小米5s capricorn_images_9.8.29_20190829.0000.00_8.0_cn线刷包提取的
附件包含boot.img 以及用Android-Image-Tools-windows从boot.img提取的boot.img-zImage 。boot是从boot.img-zImage 解压后的内核文件!d把boot文件拖到find_do_execve.exe会提示:
2222
盼望大佬有空能给看下

怎么编译 patch_kernel_root.cpp 是我用g++ 版本不对吗? 使用命令g++ patch_kernel_root.cpp -o patch_root.exe

PS C:\Users\Ad\Downloads\SKRoot-linuxKernelRoot-master\patch_kernel_root>g++ --version
g++.exe (Rev10, Built by MSYS2 project) 12.2.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

-------------------------------------------------------------------------------------------------

PS C:\Users\Ad\Downloads\SKRoot-linuxKernelRoot-master\patch_kernel_root> g++ patch_kernel_root.cpp -o patch_root.exe
In file included from patch_kernel_root.cpp:9:
ArmAsmHelper.h: In function 'std::string AsmToBytes(const std::string&)':
ArmAsmHelper.h:59:43: warning: ignoring return value of 'bool std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::empty() const [with _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator]', declared with attribute 'nodiscard' [-Wunused-result]
59 | word.empty();
| ~~~~~~~~~~^~
In file included from C:/msys64/mingw64/include/c++/12.2.0/string:53,
from C:/msys64/mingw64/include/c++/12.2.0/bits/locale_classes.h:40,
from C:/msys64/mingw64/include/c++/12.2.0/bits/ios_base.h:41,
from C:/msys64/mingw64/include/c++/12.2.0/ios:42,
from C:/msys64/mingw64/include/c++/12.2.0/ostream:38,
from C:/msys64/mingw64/include/c++/12.2.0/iostream:39,
from patch_kernel_root.cpp:4:
C:/msys64/mingw64/include/c++/12.2.0/bits/basic_string.h:1183:7: note: declared here
1183 | empty() const _GLIBCXX_NOEXCEPT
| ^~~~~
patch_kernel_root.cpp: In function 'size_t path_do_execve(const char*, const std::string&, size_t, size_t, size_t, size_t, std::vector<patch_bytes_data>&)':
patch_kernel_root.cpp:69:63: error: expected primary-expression before 'const'
69 | string str_show_root_key_mem_byte = bytesToHexString((const byte*)str_root_key.c_str(), str_root_key.length());
| ^~~~~
patch_kernel_root.cpp:69:63: error: expected ')' before 'const'
69 | string str_show_root_key_mem_byte = bytesToHexString((const byte*)str_root_key.c_str(), str_root_key.length());
| ~^~~~~
| )
patch_kernel_root.cpp:124:51: error: expected primary-expression before 'const'
124 | string strHookOrigCmd = bytesToHexString((const byte*)hookOrigCmd, sizeof(hookOrigCmd));
| ^~~~~
patch_kernel_root.cpp:124:51: error: expected ')' before 'const'
124 | string strHookOrigCmd = bytesToHexString((const byte*)hookOrigCmd, sizeof(hookOrigCmd));
| ~^~~~~
| )
patch_kernel_root.cpp: In function 'size_t path_avc_denied(const char*, size_t, size_t, size_t, std::vector<patch_bytes_data>&)':
patch_kernel_root.cpp:175:51: error: expected primary-expression before 'const'
175 | string strHookOrigCmd = bytesToHexString((const byte*)hookOrigCmd, sizeof(hookOrigCmd));
| ^~~~~
patch_kernel_root.cpp:175:51: error: expected ')' before 'const'
175 | string strHookOrigCmd = bytesToHexString((const byte*)hookOrigCmd, sizeof(hookOrigCmd));
| ~^~~~~
| )
patch_kernel_root.cpp: In function 'int main(int, char**)':
patch_kernel_root.cpp:305:25: error: 'shared_ptr' was not declared in this scope
305 | shared_ptr spData(new (std::nothrow) char[item.str_bytes.length() / 2], std::default_delete<char[]>());
| ^~~~~~~~~~
patch_kernel_root.cpp:10:1: note: 'std::shared_ptr' is defined in header ''; did you forget to '#include '?
9 | #include "ArmAsmHelper.h"
+++ |+#include
10 |
patch_kernel_root.cpp:305:36: error: expected primary-expression before 'char'
305 | shared_ptr spData(new (std::nothrow) char[item.str_bytes.length() / 2], std::default_delete<char[]>());
| ^~~~
patch_kernel_root.cpp:306:78: error: 'spData' was not declared in this scope
306 | hex2byte((uint8_t*)item.str_bytes.c_str(), (uint8_t*)spData.get());

Nexus 6p 根据readme path 开机正常,但是无法安装部署su

你好,我的设备是Nexus 6(android8.1),根据readme文档path内核后能正常开机,但是好像并没有root成功,调试源代码查看错误信息
create_su_hide_folder error:/data/local/tmp/su_40ab264ef2659a3da13690e41d41a8274c9cc1086dfd016989de0561fc61a4d47bec2d5094d9125e98db3c4785e61c54ae22628934aa30478ec301759b33ba3b5b9bd21fbb2ca823bd13699dc0294ab5c2/

f57faabff70614d1dfed684d20ea8d0a
上传两个内核文件
里面文件分别是
kernel_core_rebuild 是经过patch_kernel_root 后的内核文件,
kernel_core_bak 是原内核文件
kernel_core_rebuild.zip
patch_kernel_root执行步骤,不知道是不是这几个函数入口和偏移没有找对(我是结合 一个很旧的内核cred偏移值无法确定 里的图片找的这几个入口和偏移)
请输入do_execve函数的入口位置:
0x291dbc
请输入avc_denied函数的入口位置:
0x37bc34
请输入task_struct结构体里cred的十六进制偏移值(从proc_pid_status里能看到):
0x4e8
请输入task_struct结构体里seccomp的十六进制偏移值(从proc_pid_status里能看到):
0x940
是否需要自动随机生成ROOT密匙(1需要;2不需要):
1

红米6pro 3.18内核 patch后无法开机

patch后无法开机。
然后我在未patch的kernel的ffffffc000080300添加了一个汇编函数,仅仅一个指令RET,不使用这个函数,可以正常启动内核。我把do_execve的BL nullsub替换为BL 我创建的函数,便依然无法开机。请问为什么无法调用自己添加的函数?希望大佬能给些思路。

关于函数入口地址的一些问题

Base: FFFFFF9B1E680000
do_execve
FFFFFF9B1EAAA880                 SUB            SP, SP, #0x30; patch 前
FFFFFF9B1EAAA880                 B               sub_FFFFFF9B1E6803C8; patch后
FFFFFF9B1EAAA884                 STP             X29, X30, [SP,#0x30]
FFFFFF9B1EAAA888                 ADD             X29, SP, #0x30
......
......
FFFFFF9B1EAAA8F0                 LDP             X29, X30, [SP,#0x30+var_10]
FFFFFF9B1EAAA8F4                 ADD             SP, SP, #0x30
FFFFFF9B1EAAA8F8                 RET

avc_denied
FFFFFF9B1E8CBF24                 STP             X29, X30, [SP,#-0x10]!; patch前
FFFFFF9B1E8CBF20                 B               sub_FFFFFF9B1E680330; patch 后
......
......
FFFFFF9B1E8CBF50                 LDP             X29, X30, [SP+0x10],#0x10
FFFFFF9B1E8CBF54                 RET

我按照步骤一步步patch后,patch后的函数入口位置如上,每个函数第一条指令都被替换成了跳转指令
刷入patch后的内核没法获取root权限

是我函数入口位置选择有问题吗?

About so injection, safe_inject_process64_so_wrapper

这个函数有例子吗,第一个rootkey,第二个目标进程pid,第三个待注入的so路径,第四个是待注入so里面的函数吗?
safe_inject_process64_so_wrapper函数 执行不成功阿
safe_inject_process_run_exit_wrapper 这个函数我可以执行

Is there an example of this function, the first rootkey, the second target process pid, the third so path to be injected, and the fourth is the function to be injected into so?
The safe_inject_process64_so_wrapper function failed to execute
safe_inject_process_run_exit_wrapper I can execute this function

菜单功能

按照教程,我成功完成了基本所有的工作,在这十分感谢,但是我的菜单功能缺少了几样 比如授权ADB的权限,现在我无法给与我的shell
ROOT权限 请帮助我

大佬好

之前提及的 内核无痕注入 啥时候能落实一下呢,谢谢

xiaomi 8 can't get su after patch

Hello,I follow your tutorial patched the boot.img. The phone open normally,but can't get su privilege.
My device is xiaomi8 UD.The images is "equuleus_images_V12.5.1.0.QECCNXM_20210705.0000.00_10.0_cn_3cb808c7f4".
Screenshot_2021-07-04-19-48-04-810_com linux permissionmanager
Here is my boot.img after zip:
boot.zip
cred:0x840
seccomp:0x8E0
do_execve:0x1c0f7c
avc_denied:0x38A8AC
here is the img file after after patching and 0 padding :
image-new-patch.zip
After flashing the image-new-patch.img,it did't work properly and I don't konw how to do next.Can you give me some instructions,thanks.

There is some conjecture which I might did wrong.I get the boot.img from xiaomi images.This kernel file "boot.img-kernel" after unpacking from Android Image Kitchen still need to be unziped.Only after that the kernel file can be read by IDA arm.After I patched it I need zip it back.But the kernel file after patching and zipping it's size is bigger than it unpack from AIK.
8134142
3134152

If you think I didn't describe it clearly,I can make a video to show you all procedure.

拖拽内核文件至exe无结果

请问大佬,unpackimg boot.img得到的kernel文件拖动到find_cred_has_capability有结果,但是其余两个exe文件没有结果是什么原因?

大佬,点获取root权限时闪退

使用do_execve 001AEBBC avc:003A65C8 cred 0x840 seccomp 0x8F8
这几个入口点

内核文件
Image

pm点击获取root权限的时候软件闪退 ,dmesg获取到下面几个日志:
[ 1463.174682] [pid:981,cpu1,wificond][W][vap:0]{wal_cfg80211_get_station::rssi -23.} [F:1205][L:4427]
[ 1463.328186] [pid:396,cpu0,kworker/u16:6]wifi sleep cmd send ,wakelock cnt 1
[ 1463.421325] [pid:108,cpu1,kworker/u16:1]wifi wakeup cmd send,wakelock cnt 2
[ 1463.577606] [pid:6165,cpu1,kworker/u16:2]wifi sleep cmd send ,wakelock cnt 1
[ 1463.620727] [pid:396,cpu3,kworker/u16:6][hisi_coul_core]coul_ntc_temperature_compensation: current = 0, temp_without_compensation = 330, temp_with_compensation = 330
[ 1463.620758] [pid:396,cpu3,kworker/u16:6][hisi_coul_core]stably temp!,old_temp =330,cnt =1, temp = 330
[ 1463.625579] [pid:108,cpu1,kworker/u16:1]wifi wakeup cmd send,wakelock cnt 2
[ 1463.716461] [pid:6167,cpu0,rmissionmanager]UID root escalation!
[ 1463.716491] [pid:6188,cpu3,Profile Saver]UID root escalation!
[ 1463.716888] [pid:6188,cpu3,Profile Saver]UID root escalation!
[ 1463.716888] [pid:6188,cpu3,Profile Saver]UID root escalation!
[ 1463.812652] [pid:6198,cpu5,mali-utility-wo]mali gpufreq: kctx 0000000000000000 being destroyed
[ 1463.883361] [pid:108,cpu1,kworker/u16:1]wifi sleep cmd send ,wakelock cnt 1
[ 1463.932189] [pid:108,cpu0,kworker/u16:1]wifi wakeup cmd send,wakelock cnt 2
[ 1464.092712] [2023:04:15 02:44:37][pid:6165,cpu1,kworker/u16:2]wifi sleep cmd send ,wakelock cnt 1
[ 1464.137359] [pid:108,cpu2,kworker/u16:1]wifi wakeup cmd send,wakelock cnt 2
[ 1464.291687] [pid:108,cpu3,kworker/u16:1]wifi sleep cmd send ,wakelock cnt 1
[ 1464.387207] [pid:241,cpu0,kworker/0:1H]sp805-wdt e8a06000.watchdog0: watchdog kick now 32K 47979182 rqclock 1450718691067 ret 1
[ 1464.547485] [pid:6165,cpu2,kworker/u16:2]wifi wakeup cmd send,wakelock cnt 2
[ 1464.704040] [pid:396,cpu2,kworker/u16:6]wifi sleep cmd send ,wakelock cnt 1
[ 1464.751708] [pid:396,cpu1,kworker/u16:6]wifi wakeup cmd send,wakelock cnt 2
[ 1464.912139] [pid:6165,cpu1,kworker/u16:2]wifi sleep cmd send ,wakelock cnt 1
[ 1464.956390] [pid:108,cpu1,kworker/u16:1]wifi wakeup cmd send,wakelock cnt 2
[ 1465.111541] [2023:04:15 02:44:38][pid:396,cpu1,kworker/u16:6]wifi sleep cmd send ,wakelock cnt 1
[ 1465.111938] [pid:396,cpu1,kworker/u16:6]wifi wakeup cmd send,wakelock cnt 2
[ 1465.216186] [pid:396,cpu3,kworker/u16:6]wifi sleep cmd send ,wakelock cnt 1
[ 1465.375915] [pid:396,cpu1,kworker/u16:6][hisi_get_charger_type]type: sdp
[ 1465.376220] [pid:396,cpu1,kworker/u16:6][I/usb_short_circuit_protect] tusb adc value [0]=32

使用的内核源代码:
https://github.com/wutaijieing/Code_Opensource_kirin710/tree/main/kernel

大佬,求救,是入口点问题还是内核限制了?

patch more syscall

i want to patch other syscall, openat and other ... can u tell me how please ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.