2017-04-15 7 views
0

私はwinappdbgデバッグを使用して、デバッガに接続するプロセスにcreatefile関数をフックするイベントハンドラを作成しています。私は "ループ" funcを使用することができませんでした。なぜなら、この方法でデバッガはストップできないので、私は他の関数を使用します。デタッチした後、いくつのcreatefile呼び出しが発生したのかを調べると、私はプロセスのcpu precentを取得しようとしていますが、プロセスは自動的に0になります。デバッガーが原因だと思います。なぜかwinappdbg debug + api hooking + cpu precent

while True: hooked = ]

eventhandelerobject = hooking4.EventReciever() 
    debugger = Debug(eventhandelerobject,False) 


    """hooking""" 
    for procid in psutil.pids(): 
     if not whitelist5.inlist(procid): 
      print procid 
      try: 
       debugger.attach(procid) 
       hooked.append(procid) 
       print "Initialized!"+str(procid) 

       errorfile.write("Initialized!"+str(procid)) 

      except Exception as ex: 
       print ex 
       errorfile.write(str(ex)+str(procid)) 
    run_time = 60 

    start = time.clock() 

    time_passed = 10 
    print "start" 
    while time.clock()-start<60: 
     ############################# 
     if time.clock()-start>time_passed: 
      for procid in psutil.pids(): 
       if not whitelist5.inlist(procid) and procid not in hooked: 
        try: 
         debugger.attach(procid) 
         hooked.append(procid) 
         print "Initialized!"+str(procid) 
        except: 
         continue 
       ###################################### 

      time_passed+=10 

     try: 
      #debugger.next() 
      event = debugger.wait(1000) 
      debugger.dispatch(event) 
      debugger.cont(event) 
     except: 
      continue 
    print "stop" 



    print "part2" 

    over_cpu_mem_id = cpu_mem4.dangerous_cpu_and_mem(0,0) 
    counter = hooking_count.Count.counterdict 
    print "counter:" 
    print counter 
    sorted_counter = sorted(counter.items(), key=operator.itemgetter(1)) 
    if over_cpu_mem_id >= 1: 
     if registry4.manage() and not whitelist5.inlist(over_cpu_mem_id): 
      print "cpu+registry , not in whitelist" 
      pid_being_suspected = over_cpu_mem_id 
      if file4.mannge(filesnumber, timeinseconds): 
       print "files are changing..." 


       if len(sorted_counter)>0: 
        most_createfiles = sorted_counter[0][1] 
        pid = sorted_counter[0][0] 
        ############################# 
        exe = psutil.Process(pid).exe() 
        print exe 
        cpuexe = psutil.Process(over_cpu_mem_id).exe() 
        print cpuexe 
        ###################### 

        if most_createfiles >= 100 and pid == over_cpu_mem_id: 
         process_control5.process_dealing(pid) 
     elif pid_being_suspected >0 and len(sorted_counter)>0: 
      most_createfiles = sorted_counter[0][1] 
      pid = sorted_counter[0][0] 
      if most_createfiles >= 100 and pid == pid_being_suspected: 
       process_control5.process_dealing(pid) 
      pid_being_suspected = -1 



    print "no danger" 


    hooking_count.Count.reset_dict() 


    time.sleep(10) 
    debugger.stop() 

答えて

0

私はデバッグプロセスのCPU使用率を取得するために試したことがないよう、非常にわからないんだけど、私はあなたがしようとすることを測定する際に、デバッグプロセスを一時停止しているからだと思います。一般的に、デバッガが制御すると、デバッグされたプロセスはフリーズします。したがって、常に0%の使用率が見られます。

この場合、解決策はかなり複雑です。 2つのスクリプト(あるいは1つのスクリプトが2回実行される)を作成する必要があります。ターゲットをデバッグし、すべてのプロセスIDと開いているファイルを収集します。もう1つはCPU使用率を並行して測定します。