3

I am using remote interpreter on pycharm on WSL (configured it with this tutorial: https://www.jetbrains.com/help/pycharm/using-wsl-as-a-remote-interpreter.html)

I was able to run everything I needed successfully, but when I tried to use pwntools (https://github.com/Gallopsled/pwntools) I was able to import it successfully on the WSL bash python interpreter, but not on Pycharm.

This is what I ran:

from pwn import *

On Pycharm it was stucked and I interrupted it, this is the trace of the Exception (where it stucks):

ssh://shahar@localhost:22/usr/bin/python -u /tmp/pycharm_project_271/pwnablekr/fd.py
Traceback (most recent call last):
  File "/tmp/pycharm_project_271/pwnablekr/fd.py", line 1, in <module>
    from pwn import *
  File "/home/shahar/.local/lib/python2.7/site-packages/pwn/__init__.py", line 6, in <module>
    pwnlib.args.initialize()
  File "/home/shahar/.local/lib/python2.7/site-packages/pwnlib/args.py", line 208, in initialize
    term.init()
  File "/home/shahar/.local/lib/python2.7/site-packages/pwnlib/term/__init__.py", line 74, in init
    term.init()
  File "/home/shahar/.local/lib/python2.7/site-packages/pwnlib/term/term.py", line 109, in init
    c = os.read(fd.fileno(), 1)
KeyboardInterrupt

Process finished with exit code 1
    enter code here

On my WSL bash it ran just fine:

shahar@MYCOMPUTERNAME:/mnt/c/Users/shahar$ python
Python 2.7.12 (default, Dec  4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pwn import *
>>>

When I looked at the piece of code where it stuck (from the trace of the Exception):

while True:
    c = os.read(fd.fileno(), 1)
    s += c
    if c == 'R':
        break

at the beginning of the script as a global variable:

fd = sys.stdout

I understood from the internet that this function (which this loop is part of it) is related to take over the terminal. Maybe it is related to the fact I am not running from terminal? Had anyone seen this kind of problem before? has some helpful tips?

Thank you very much!

3 Answers3

2

I have a potential fix as well, and it's adding a PWNLIB_NOTERM to the environment.

import os
os.environ['PWNLIB_NOTERM'] = 'True'  # Configuration patch to allow pwntools to be run inside of an IDE
import pwn

Screenshot showing it runs and we get an Encoder object instance

h0w1tzr
  • 21
  • 3
  • Thanks, I was trying to understand why pwntools worked from from shell but not from PyCharm IDE. Your solution was the correct one. – IdanB Feb 01 '20 at 11:07
1

There is another way to solve it.

If you use Pycharm , you can tick the box Run with Python console in Run configurations.

It will work in Pycharm 2020.3 with IPython.(I think it also works without IPython) screenshot

coderina
  • 1,583
  • 13
  • 22
ssh000
  • 11
  • 1
  • Both os.environ solution and this solution worked like a charm. This solution is better since I don't have to change my old scripts. Thanks! – Ohad Mar 29 '22 at 07:30
0

There is no effective way, I debug it, the problem is term initialization.it may also be related to the environment variables of the TERM and TERMINFO.My solution is to modify the last line of /usr/local/lib/python2.7/dist-packages/pwnlib/args.py,delete term.init(), replace it with anything else to bypass the initialization of pwnlib.

replace this line:

debug pwntools:

Tobias Wilfert
  • 919
  • 3
  • 14
  • 26
JiangWu
  • 1
  • 1