poke

Linux系统中如何彻底隐藏一个TCP连接?

北城以北 提交于 2020-04-09 18:02:29
前面的文章中,我稍微描述了一下如何隐藏一个TCP连接: https://blog.csdn.net/dog250/article/details/105372214 在上文中,我采用了 传统 的做法,即hook住proc的/proc/net/tcp展示接口,但这个方法并没有可观赏性,说白了有点像掩耳盗铃,毕竟连接还是在那里的,你自己去遍历系统的TCP ehash表,还是能看到所有大的TCP连接的。 所以,今天我来用 手艺活儿 的方法,庖丁解牛般演示如何彻底隐藏一个TCP连接。 看看那些各种hook proc展示接口的掩耳盗铃法,多么的复杂!多么的复杂啊!看看我这个,多么的彻底!多么的简单啊! 所谓的彻底隐藏,就是将一个TCP连接从系统的TCP ehash表中摘除!这个很容易,调用 inet_unhash 即可了。 问题是,摘除了之后,我们把它放在哪里,才能让进来的数据包顺利匹配到该连接呢? 答案还是二进制hook。 我们搜索系统内存中含有8个字节(一个地址的大小)空隙的位置,把sock结构体的地址放进去即可。这个空隙一般在内核函数之间。比如我使用的地址: # define ROOM_ADDR 0xffffffff815622dd 它就是ip_rcv函数和ip4_frag_match之间的无用空隙。当然了,我们也可以动态分配内存,但是并不优雅。 来吧,下面是代码: // hide

Linux系统中隐藏掉你的rootkit的TCP连接

|▌冷眼眸甩不掉的悲伤 提交于 2020-04-09 04:17:04
前文中,我描述了一种彻底隐藏进程的方法: https://blog.csdn.net/dog250/article/details/105292504 并且,我给出了如何恢复的方法: https://blog.csdn.net/dog250/article/details/105371830 但是不过瘾,一般而言,rootkit都是会偷偷建立一个TCP连接的,那么如何不让经理发现这些连接呢?虽然经理看不到进程,但是经理会netstat啊。 使用net namespace可以隐藏所有的连接,方法参见: https://blog.csdn.net/dog250/article/details/103182447 但是,如此一来,经理会懵的,经理会彻查这是怎么回事,所以这不妥。 必须要仅仅隐藏特定的TCP连接! 显然,将特定的TCP连接从ehash中摘除是一个彻底的方案,然而这需要hotfix tcp_v4_rcv函数,大规模二进制hook的手艺我已经发誓不再玩了,所以这次,我也俗套一把,我来hook掉TCP连接的显示接口,即 tcp4_seq_show! 和常规方法不同的是,我不使用替换operation指针的方法,而是稍微采用二进制hook的方法,我会在tcp4_seq_show的最前面调用下面的逻辑: void stub_func_tcp_seq_show ( struct seq

Linux系统中彻底隐藏你的进程(隐藏后如何恢复显示?)

夙愿已清 提交于 2020-04-09 04:16:34
在前文中,我展示了一个超级简单的rootkit辅助工具: https://blog.csdn.net/dog250/article/details/105292504 在这篇文章中,一旦进程被隐藏了,很难恢复。言外之意就是,这是最底层的隐藏,而不是靠hook那些procfs接口之类的方式。 我们已经把进程从链表中摘除,那么该进程便无法被遍历到,如何恢复它呢?换句话说,我自己给自己出了个难题,如果我自己攻击了我自己的机器植入了rootkit,我自己又如何把它揪出来?! 也不难! 虽然进程被从链表摘除了,但它还在运行队列啊!所以我们只需要遍历per cpu的runqueue就可以了。不过这里要记住,如果被隐藏的进程睡眠在某个wait queue上,这种方式就不行了,需要唤醒隐藏进程后再试。 代码如下: // 以下这些偏移值需要hack得到。 # define CPU_OFFSET 2336 # define CRQ_OFFSET 160 int reshow_process ( void ) { struct list_head * list ; struct task_struct * p , * n ; unsigned long * rq_addr , base_rq ; char * tmp ; int cpu = smp_processor_id ( ) ; struct

2D开发游戏作业:面向对象设计应用——发牌游戏

蓝咒 提交于 2020-03-21 16:34:50
3 月,跳不动了?>>> 1.游戏介绍 四名牌手打牌,电脑随机將52张牌(不合大、小王)发给四名牌手,并在屏幕上显示每位牌手的牌。 2.程序设计步骤 设计类 发牌程序设计出三个类: Card类、Hand类和Poke类。 Card类 Card类代表一张牌,其中,FaceNum字段指的是牌面数字1~13,Suit字段指的是花色,”梅”为梅花,”方”为方块,”红”为红桃,”黑”为黑桃。 Hand类 Hand类代表手牌(一个玩家手里拿的牌),可以认为是一位牌手手里的牌,其中,cards列表变量存储牌手手中的牌。可以增加牌、清空手里的牌、把一张牌给别的牌手等操作。 Poke类 Poke类代表一副牌,我们可以将一副牌看作是有52张牌的牌手,所以继承Hand类。由于其中cards列表变量要存储52张牌,而且要进行发牌、洗牌操作,所以增加如下的方法。 主程序 主程序比较简单,因为有四个牌手,所以生成players列表存储初始化的四位牌手。生成一副牌的对象实例poke1,调用populate()方法生成有52张牌的一副牌,调用huffle()方法洗牌打乱顺序,调用deal(players,13)方法分别给每位玩家发13张牌,最后示四位牌手所有的牌。 3.部分代码注释 1.定义扑克牌的牌面: 牌面数字:1—13 梅为梅花,方为方钻,红为红心,黑为黑桃 2.定义翻牌方法 3.定义牌的顺序号 4

3.面向对象设计应用——发牌游戏

ⅰ亾dé卋堺 提交于 2020-03-17 14:45:56
某厂面试归来,发现自己落伍了!>>> # Card Module # Basic classes for a game with playing cards class Card(): """A playing card""" RANKS = ["A","2","3","4","5","6","7", "8","9","10","J","Q","K"] # 牌面数字1-13 SUITS = ["梅花","方片","红心","黑桃"] def __init__(self,rank,suit,face_up = True): self.rank = rank # 牌面数字1~13 self.suit = suit # 花色 self.is_face_up = face_up # 是否显示牌的正面,True为正面,False为反面 def __str__(self): # printf if self.is_face_up: rep = self.suit + self.rank # +" " + str(self.pic_order()) else: rep = "XX" return rep def flip(self): # 翻牌方法 self.is_face_up = not self.is_face_up def pic_order(self): # 牌的顺序号 if self

python tkinter游戏开发

不问归期 提交于 2020-03-13 19:43:09
使用python制作简单的游戏案例 编辑环境:python3.7 编译工具:vscode 案例目录: 1.序列应用——猜单词游戏 2.面向对象设计应用——发牌游戏 3.图形界面设计——猜数字游戏 4.Tkinter图形绘制——图形版发牌程序 5.Python图像处理——人物拼图游戏 一、序列应用——猜单词游戏 运行结果: WORDS中定义需要被猜的词库,默认游戏自动开始,使用random函数从WORDS中随机选择一个单词,之后将单词随机打乱输出。猜测时,如果答案不对会一直循环,若答案正确则让用户输入yes or no 选择是否继续。 完整代码: import random WORDS = ("python", "jumble", "easy", "code", "sleep", "flask", "django", "game", "break", "phone") print( '''欢迎参加猜单词游戏 请将字母组合成一个正确的单词 ''' ) iscontinue = "y" while iscontinue == "Y" or iscontinue == "y": word = random.choice(WORDS) correct = word jumble = "" while word: position = random.randrange(len(word))

python小游戏开发

荒凉一梦 提交于 2020-03-10 02:04:26
python小游戏开发 一】发牌游戏 运行截图 具体代码 '''python class Card(): """A Playing card.""" RANKS=["A","2","3","4","5","6","7","8","9","10","J","Q","K"] #牌面 SUITS=["梅","方","红","黑"] def __init__(self,rank,suit,face_up=True): self.rank=rank #指的是牌面数字 self.suit=suit #suit是花色 self.is_face_up=face_up #是否显示牌正面,True为正面,False为牌背面 def __str__(self): #print() if self.is_face_up: rep=self.suit+self.rank #+" "+str(self.pic_order()) else: rep="XX" return rep #牌的顺序号 def pic_order(self): if self.rank=="A": FaceNum=1 elif self.rank=="J": FaceNum=11 elif self.rank=="Q": FaceNum=12def pic_order(self): elif self.rank=="K":

教学实验:python游戏开发

◇◆丶佛笑我妖孽 提交于 2020-03-09 16:38:23
利用python来进行2D游戏开发。 本篇为验证性作业,代码为老师所给。 序列应用——猜单词游戏 代码如下: import random WORDS = ("python", "jumble", "difficult", "answer", "continue", "phone", "position", "game") print(""" 欢迎参加猜单词游戏 把字母组合成一个正确的单词 """) iscontinue = "y" while iscontinue == "y" or iscontinue == "Y": word = random.choice(WORDS) correct = word jumble = "" while word: position = random.randrange(len(word)) jumble += word[position] word = word[:position] + word[(position + 1):] print("乱序后单词:", jumble) guess = input("\n请你猜:") while guess != correct and guess != "": print("对不起不正确.") guess = input("继续猜:") if guess == correct: print("真棒

Python 游戏开发

旧时模样 提交于 2020-03-09 16:38:11
以下皆为老师代码,该次实验皆为验证性实验 python序列应用:猜单词 代码如下: ``import random #创建单词序列 WORDS=("python","jumble","easy","difficult","answer","continue","phone","position","game") #start the game print( """ 欢迎参加猜单词游戏 把字母组合成一个正确的单词 """ ) iscontinue="y" while iscontinue=="y"or iscontinue=="Y": word =random.choice(WORDS) correct=word jumble="" while word: position=random.randrange(len(word)) jumble+=word[position] word= word[:position]+word[(position+1):] print("乱序后单词:",jumble) guess =input("\n请你猜:") while guess !=correct and guess !="": print("对不起不正确.") guess =input("继续猜:") if guess ==correct: print("真棒,你猜对了!\n")

python五个小游戏制作案例

喜你入骨 提交于 2020-03-09 15:26:52
基于python的游戏制作案列 一、序列应用——猜单词游戏 1.在猜单词游戏程序中导入相关模块。 2.创建所有待猜测的单词序列元组WORDS。 3.显示游戏欢迎界面。 4.实现游戏的逻辑。 首先,从序列中随机挑出一个单词,如“easy”;然后打乱这个单词的字母顺序;接着,通过多次循环就可以产生新的乱序后的单词jumble;最后,将乱序后的单词显示给玩家。 5.玩家输入猜测单词,程序判断对错。若玩家猜错,则可以继续猜。 参考代码: import random WORDS=("python","jumble","easy","difficult","answer","continue","phone","position","game") print("欢迎参加猜单词游戏,把字母组合成一个正确的单词") iscontinue="y" while iscontinue=="y"or iscontinue=="Y": word=random.choice(WORDS) corrent=word jumble="" while word: position=random.randrange(len(word)) jumble+=word[position] word=word[:position]+word[(position+1):] print("乱序后单词:",jumble)